J'étends la méthode de publication de mon contrôleur pour une tâche appelée "setup".
C'est la méthode étendue:
/**
* publish function.
*
* @access public
* @return void
*/
public function publish()
{
$app = JFactory::getApplication();
$jinput = JFactory::getApplication()->input;
$ids = $jinput->get('cid', '', 'array');
$task = $this->getTask();
$date = JFactory::getDate();
$modelitem = $this->getModel('Item');
$tableitem = JTable::getInstance('Item','BestiaTable');
foreach($ids as $id)
{
$tableitem->load($id);
switch($task)
{
case 'publish' : $tableitem->autorenew = 1;
break;
case 'unpublish': $tableitem->autorenew = 1;
break;
case 'archive' : $tableitem->autorenew = 0;
$tableitem->terminatedon = $date->toSql();
break;
case 'trash' : $tableitem->autorenew = 0;
$tableitem->terminatedon = $date->toSql();
$tableitem->end = $date->toSql();
$tableitem->overwriteend = 1;
case 'setup' : $SetupHelper = SetupHelper::getInstance();
$setupitem = $SetupHelper->setupItem($id);
if ($setupitem)
{
}
else
{
$app->enqueueMessage(implode(", ", $SetupHelper->getErrors()), 'warning');
}
break;
break;
}
$tableitem->store();
}
$publish = parent::publish();
$this->setRedirect('index.php?option=com_bestia&view=items', false);
return true;
}
Ok - la publication et la dépublication fonctionnent bien, mais la tâche d'installation qui est lancée par un bouton de barre d'outils comme celui-ci:
JToolbarHelper::custom('items.setup', 'cogs', '', 'Setup item', true);
Change toujours l'état de l'objet en 0
au lieu de -1
_ (qui est l’état de "wait for setup" ou 1
(qui est l'état de "setup okay").
Comment puis-je changer ce comportement et dire à la méthode quel état utiliser?
Vous appelez parent::publish()
. Cette méthode a un tableau qui mappe les tâches aux états ( ligne 19 ):
$data = array('publish' => 1, 'unpublish' => 0, 'archive' => 2, 'trash' => -2, 'report' => -3);
Ensuite, il obtient la tâche (ligne suivante):
$task = $this->getTask();
Ce qui est "setup" dans votre cas. Après cela, il essaie de lire la valeur de la tâche dans le tableau:
$value = JArrayHelper::getValue($data, $task, 0, 'int');
Mais il ne trouvera pas "setup" dans ce tableau. La valeur est donc 0. Cela explique pourquoi votre état passe à 0.
Je n'appellerais pas parent :: publish () si votre tâche est "setup". Vous pourriez éviter cela en encapsulant cet appel comme ceci:
if($task != "setup")
{
$publish = parent::publish();
}
else
{
// Check the code from JControllerAdmin how to set models state
// e.g. $modelitem->publish($id, -1); set a Nice message and how to redirect
// back to your list
}