Cara mengarahkan pengguna dengan pesan sistem di Joomla 3

9

Saya tahu Anda dapat mencapai ini dengan melakukan:

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

tetapi dokumentasi di

JFactory :: getApplication

mengatakan itu sudah usang dan menyarankan untuk menggunakan enqueueMessageyang sudah usang dan yang tidak mengarahkan Anda misalnya ke halaman rumah.

Bagaimana saya bisa mengarahkan pengguna ke beranda dengan pesan sistem menggunakan metode yang tidak usang. Dokumentasi mengatakan mereka akan (?) Ditinggalkan dalam versi 4 Joomla, jadi apakah metode saat ini satu-satunya atau sudah ada metode standar baru untuk mencapai ini?

Sunting: Metode-metode ini tidak ditinggalkan pada JApplicationCms (perpustakaan Joomla), tetapi ditinggalkan pada JApplication (Joomla Plaftorm). Jadi sejak JFactory::getApplicationmengembalikan objek JApplicationCms, maka metode suka redirectdan enqueueMessagetidak usang dan menggunakannya adalah cara yang benar untuk mengarahkan ulang dengan pesan.

Adam M.
sumber

Jawaban:

10

Melewati pesan melalui fungsi pengalihan sudah usang, tetapi keduanya redirect()dan enqueueMessage()keduanya masih baik untuk digunakan sendiri.

Anda hanya perlu menggunakan keduanya secara bersamaan, seperti:

$app = JFactory::getApplication();

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

enqueueMessagemenyimpan pesan dalam suatu sesi, jadi ketika Anda memanggil ini sebelum redirect()fungsi, nilai sesi masih ada pada halaman yang Anda arahkan, sehingga pesan tersebut akan ditampilkan;)

Lodder
sumber
1
Sebenarnya ini adalah solusi yang lebih baik karena sejak Joomla! 3.2 JFactory::getApplication()mengembalikan objek JApplicationCms alih-alih JApplication yang sudah usang
Kitase88
Benar metode ini tidak ditinggalkan pada JApplicationCms (Joomla libraries), tetapi sudah usang pada JApplication (Joomla Plaftorm). Tautan dokumentasi mengatakan ini mengembalikan JApplicationCms (tautan tidak berfungsi) dan mengatakan untuk melihat JApplication di mana metode ini tidak digunakan lagi. Jadi kebingungan dokumentasi dan saya akan menandakan masalah ini, sehingga bisa diperbaiki.
Adam M.
4

Hal terbaik untuk dilakukan adalah menangani semua pengalihan langsung di sub-controller di mana Anda hanya perlu menggunakan $this->setRedirect($url,$msg,$type);dan MVC akan melakukan sisa pekerjaan.

Jika Anda perlu mengarahkan ulang di luar pengontrol Anda dapat menggunakan kelas JControllerLegacy :

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