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

9

Je sais que vous pouvez y parvenir en faisant:

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

mais la documentation à

JFactory :: getApplication

dit qu'il est obsolète et suggère d'utiliser enqueueMessagequi 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 en utilisant des méthodes qui ne sont pas obsolètes. La documentation indique qu'ils seront (?) Obsolètes dans la version 4 de Joomla, est-ce que la méthode actuelle est 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 obsolètes sur JApplication (Joomla Plaftorm). Donc, comme JFactory::getApplicationrenvoie l'objet JApplicationCms, les méthodes comme redirectet enqueueMessagene sont pas obsolètes et leur utilisation est la bonne façon de rediriger avec le message.

Adam M.
la source

Réponses:

10

Passer le message via la fonction de redirection est obsolète, mais les deux redirect()et enqueueMessage()sont toujours bien à utiliser seuls.

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'));

enqueueMessagestocke le message dans une session, donc lorsque vous appelez cela avant la redirect()fonction, la valeur de la session existe toujours sur la page vers laquelle vous avez été redirigé, ainsi le message s'affichera;)

Lodder
la source
1
En fait, c'est une meilleure solution car depuis Joomla! 3.2 JFactory::getApplication()renvoie un objet JApplicationCms au lieu de JApplication obsolète
Kitase88
Vrai, ces méthodes ne sont pas obsolètes sur JApplicationCms (bibliothèques Joomla), mais sont obsolètes sur JApplication (Joomla Plaftorm). Le lien de documentation indique qu'il renvoie JApplicationCms (le lien ne fonctionne pas) et indique de voir JApplication où ces méthodes sont obsolètes. C'est donc une confusion de documentation et je signalerai ce problème, afin qu'il puisse être corrigé.
Adam M.
4

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

Si vous devez rediriger en dehors des contrôleurs, vous pouvez utiliser la classe JControllerLegacy :

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