Cómo redirigir al usuario con un mensaje del sistema en Joomla 3

9

Sé que puedes lograr esto haciendo:

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

pero la documentación en

JFactory :: getApplication

dice que está en desuso y sugiere un uso enqueueMessageque también está en desuso y que no lo redirige, por ejemplo, a la página de inicio.

¿Cómo puedo redirigir a un usuario a la página de inicio con un mensaje del sistema utilizando métodos que no están en desuso? La documentación dice que (?) Quedarán en desuso en la versión 4 de Joomla, entonces, ¿es el único método actual o ya existe un método estándar nuevo para lograr esto?

Editar: estos métodos no están en desuso en JApplicationCms (bibliotecas de Joomla), pero están en desuso en JApplication (Joomla Plaftorm). Entonces, dado que JFactory::getApplicationdevuelve el objeto JApplicationCms, los métodos como redirecty enqueueMessageno están en desuso y usarlos es la forma correcta de redirigir con el mensaje.

Adam M.
fuente

Respuestas:

10

Pasar el mensaje a través de la función de redireccionamiento está en desuso, pero ambos redirect()y enqueueMessage()todavía están bien para usar solos.

Simplemente necesita usar ambos juntos, así:

$app = JFactory::getApplication();

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

enqueueMessagealmacena el mensaje en una sesión, por lo que cuando llama a esto antes de la redirect()función, el valor de la sesión todavía existe en la página a la que fue redirigido, por lo que se mostrará el mensaje;)

Lodder
fuente
1
En realidad, esta es una mejor solución porque desde Joomla! 3.2 JFactory::getApplication()devuelve un objeto JApplicationCms en lugar de JApplication en desuso
Kitase88
Es cierto que estos métodos no están en desuso en JApplicationCms (bibliotecas de Joomla), sino que están en desuso en JApplication (Joomla Plaftorm). El enlace de documentación dice que devuelve JApplicationCms (el enlace no funciona) y dice ver JApplication donde estos métodos están en desuso. Por lo tanto, es una confusión de documentación y señalaré este problema, para que se pueda solucionar.
Adam M.
4

Lo mejor que puede hacer es manejar todas las redirecciones directamente en los subcontroladores donde solo necesita usar $this->setRedirect($url,$msg,$type);y MVC hará el resto del trabajo.

Si necesita redirigir fuera de los controladores, puede usar la clase JControllerLegacy :

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