Cách chuyển hướng người dùng với thông báo hệ thống trong Joomla 3


8

Tôi biết rằng bạn có thể đạt được điều này bằng cách làm:

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

nhưng tài liệu tại

JFactory :: getApplication

nói rằng nó không được dùng nữa và đề nghị sử dụng enqueueMessagecũng không được dùng nữa và điều đó không chuyển hướng bạn đến trang chủ.

Làm cách nào tôi có thể chuyển hướng người dùng đến trang chủ bằng thông báo hệ thống bằng các phương thức không được phản đối. Tài liệu nói rằng họ sẽ (?) Không được dùng nữa trong phiên bản 4 của Joomla, vì vậy phương pháp hiện tại là duy nhất hay đã có một phương pháp tiêu chuẩn mới để đạt được điều này?

Chỉnh sửa: Các phương thức này không bị phản đối trên JApplicationCms (thư viện Joomla), nhưng không được chấp nhận trên JApplication (Joomla Plaftorm). Vì vậy, vì JFactory::getApplicationtrả về đối tượng JApplicationCms, nên các phương thức như redirectenqueueMessagekhông bị phản đối và sử dụng chúng là cách chính xác để chuyển hướng bằng tin nhắn.

Câu trả lời:


9

Truyền tin nhắn qua chức năng chuyển hướng không được chấp nhận, nhưng cả hai redirect()enqueueMessage()vẫn ổn để sử dụng riêng.

Bạn chỉ cần sử dụng cả hai cùng nhau, như vậy:

$app = JFactory::getApplication();

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

enqueueMessagelưu trữ tin nhắn trong một phiên, vì vậy khi bạn gọi nó trước redirect()hàm, giá trị phiên vẫn tồn tại trên trang bạn được chuyển hướng đến, do đó tin nhắn sẽ hiển thị;)


1
Trên thực tế đây là một giải pháp tốt hơn vì kể từ Joomla! 3.2 JFactory::getApplication()trả về một đối tượng JApplicationCms thay vì JApplication không dùng nữa
Kitase88

Đúng là các phương thức này không bị phản đối trên JApplicationCms (thư viện Joomla), nhưng không được chấp nhận trên JApplication (Joomla Plaftorm). Liên kết tài liệu nói rằng nó trả về JApplicationCms (liên kết không hoạt động) và nói để xem JApplication nơi các phương thức này không được chấp nhận. Vì vậy, đó là sự nhầm lẫn tài liệu và tôi sẽ báo hiệu vấn đề này, vì vậy nó có thể được sửa chữa.
Adam M.

4

Điều tốt nhất để làm là xử lý tất cả các chuyển hướng trực tiếp trong các bộ điều khiển phụ nơi bạn chỉ cần sử dụng $this->setRedirect($url,$msg,$type);và MVC sẽ thực hiện phần còn lại của công việc.

Nếu bạn cần chuyển hướng ra ngoài bộ điều khiển, bạn có thể sử dụng lớp JControllLegacy :

$controller = JControllerLegacy::getInstance("ComponentName");
$controller->setRedirect($url,$msg,$type);
$controller->redirect();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.