web-dev-qa-db-fra.com

Comment rediriger un utilisateur avec un message système dans Joomla 3

Je sais que vous pouvez y arriver en faisant:

JFactory::getApplication->redirect(url, message, type)

mais la documentation à

JFactory :: getApplication

dit qu'il est obsolète et suggère d'utiliser enqueueMessage qui est également obsolète et qui ne vous redirige pas, par exemple, vers la page d'accueil.

Comment puis-je rediriger un utilisateur vers la page d'accueil avec un message système à l'aide de méthodes non obsolètes? La documentation indique qu'elles seront (?) Obsolètes dans la version 4 de Joomla. La méthode actuelle est-elle donc la seule ou existe-t-il déjà une nouvelle méthode standard pour y parvenir?

Edit: Ces méthodes ne sont pas obsolètes sur JApplicationCms (bibliothèques Joomla), mais sont déconseillées sur JApplication (Joomla Plaftorm). Donc depuis JFactory::getApplication renvoie l'objet JApplicationCms, les méthodes telles que redirect et enqueueMessage ne sont pas obsolètes et leur utilisation est la méthode correcte de redirection avec message.

8
Adam M.

Passer le message via la fonction de redirection est déconseillé, mais redirect() et enqueueMessage() peuvent toujours être utilisés séparément.

Vous devez simplement utiliser les deux ensemble, comme ceci:

$app = JFactory::getApplication();

$app->enqueueMessage('Redirect to another page was successful', 'success');
$app->redirect(JRoute::_('index.php'));

enqueueMessage stocke le message dans une session. Ainsi, lorsque vous appelez cela avant la fonction redirect(), la valeur de la session existe toujours sur la page vers laquelle vous avez été redirigé. Le message s'affiche;)

7
Lodder

La meilleure chose à faire est de gérer toutes les redirections directement dans les sous-contrôleurs où il vous suffit d'utiliser $this->setRedirect($url,$msg,$type); et MVC fera le reste du travail.

Si vous avez besoin de rediriger en dehors des contrôleurs, vous pouvez utiliser JControllerLegacy class:

$controller = JControllerLegacy::getInstance("ComponentName");
$controller->setRedirect($url,$msg,$type);
$controller->redirect();
4
Kitase88