Come reindirizzare l'utente con il messaggio di sistema in Joomla 3


9

So che puoi farlo facendo:

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

ma la documentazione a

JFactory :: getApplication

dice che è deprecato e suggerisce di usare enqueueMessageanche quello deprecato e che non ti reindirizza ad esempio alla home page.

Come posso reindirizzare un utente alla home page con un messaggio di sistema usando metodi non deprecati. La documentazione dice che saranno (?) Deprecati nella versione 4 di Joomla, quindi l'attuale metodo è l'unico o esiste già un nuovo metodo standard per raggiungere questo obiettivo?

Modifica: questi metodi non sono deprecati su JApplicationCms (librerie Joomla), ma sono deprecati su JApplication (Joomla Plaftorm). Quindi, poiché JFactory::getApplicationrestituisce l'oggetto JApplicationCms, i metodi come redirecte enqueueMessagenon sono deprecati e il loro utilizzo è il modo corretto di reindirizzare con il messaggio.

Risposte:


10

Il passaggio del messaggio tramite la funzione di reindirizzamento è deprecato, ma entrambi redirect()e enqueueMessage()sono comunque validi da usare da soli.

Devi semplicemente usare entrambi insieme, in questo modo:

$app = JFactory::getApplication();

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

enqueueMessagememorizza il messaggio in una sessione, quindi quando lo chiamate prima della redirect()funzione, il valore della sessione esiste ancora sulla pagina in cui siete stati reindirizzati, quindi verrà visualizzato il messaggio;)


1
In realtà questa è una soluzione migliore perché da Joomla! 3.2 JFactory::getApplication()restituisce un oggetto JApplicationCms invece di JApplication obsoleto
Kitase88

Vero questi metodi non sono deprecati su JApplicationCms (librerie Joomla), ma sono deprecati su JApplication (Joomla Plaftorm). Il collegamento alla documentazione dice che restituisce JApplicationCms (il collegamento non funziona) e dice di vedere JApplication dove questi metodi sono obsoleti. Quindi è confusione nella documentazione e segnalerò questo problema, quindi può essere risolto.
Adam M.

4

La cosa migliore da fare è gestire tutti i reindirizzamenti direttamente nei controller secondari in cui è sufficiente utilizzare $this->setRedirect($url,$msg,$type);e MVC farà il resto del lavoro.

Se è necessario reindirizzare al di fuori dei controller, è possibile utilizzare la classe JControllerLegacy :

$controller = JControllerLegacy::getInstance("ComponentName");
$controller->setRedirect($url,$msg,$type);
$controller->redirect();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.