Hiển thị thông báo hệ thống bên trong thành phần thay vì trong mẫu


8

Theo mặc định, các thông báo hệ thống Joomla 3 (tin nhắn, thông báo, cảnh báo) được hiển thị ở một vị trí nhất định của mẫu bằng cách sử dụng

<jdoc:include type="message" />

Có thể kiểm soát nhiều hơn những tin nhắn đó và hiển thị chúng ở các vị trí khác nhau trong thùng chứa thành phần của riêng tôi không?

Tôi đã thử sử dụng jdoc ở trên trong chế độ xem thành phần của mình (ảnh rẻ tiền) nhưng không gặp may. Có cách nào tôi có thể "chụp" các tin nhắn được tạo bởi thành phần của mình bằng hệ thống nhắn tin hệ thống tiêu chuẩn của Joomla và hiển thị chúng ở bất cứ đâu tôi muốn không?

Cảm ơn trước.

Câu trả lời:


9

Ok, có vẻ như đào thêm một chút tôi đã tìm thấy câu trả lời cho câu hỏi của riêng mình. Về cơ bản tôi tìm thấy plugin này:

http://extensions.j Joomla.org/extensions/style-a-design/popups-a-iframes/25240

Đó không phải là chính xác những gì tôi cần, nhưng kiểm tra mã của nó, tôi đã tìm ra cách để đi, có thể tóm tắt như sau (trong trường hợp ai đó đến đây để tìm kiếm cùng một câu hỏi):

  1. Nếu bạn muốn thực hiện đúng cách, bạn cần quan tâm đến các thông điệp Joomla mặc định được hiển thị trong mẫu qua <jdoc:include type="message" />, để các tin nhắn không được hiển thị hai lần
  2. Cách duy nhất để xử lý đó là sử dụng một plugin sẽ được kích hoạt trong sự kiện onB BeforeRender
  3. Trong trường hợp đó, bạn cần phải:
    • Lấy tin nhắn bằng $app = JFactory::getApplication(); $messageQueue = $app->getMessageQueue();
    • Xử lý các thông điệp khi cần thiết để xuất chúng trong thành phần của bạn
    • Xóa hàng đợi tin nhắn, để tin nhắn không được hiển thị hai lần. Trong các phiên bản Joomla trước đây, có thể xóa trực tiếp hàng đợi bằng một phương thức, nhưng trong Joomla 3, bạn cần thay thế hàng đợi hiện tại bằng một hàng trống
  4. Thế là xong, bạn có những thông điệp được ghi nhận trong hệ thống nhắn tin Joomla mặc định có sẵn trong thành phần của bạn.

Điều này cần một số công việc, nhưng tôi nghĩ rằng con đường tổng thể để làm theo là rõ ràng. Hy vọng nó hữu ích cho người khác trong tình huống tương tự.


0

Để hoàn thành câu trả lời (tốt) này từ Isidro, hãy lưu ý rằng cho đến ngày hôm nay (Joomla 3.8.12), getMessageQueue()hàm có thể được gọi với "true" ( getMessageQueue(true)) là tham số để lọc / xóa hàng đợi tin nhắn.

Cuối cùng, để có được các thông điệp được lưu trữ theo cách dự kiến ​​để bố trí hiển thị chúng, hãy gọi đoạn mã này (trích từ MessageRenderer::getData()):

// Initialise variables.
$lists = array();
// Get the message queue
$messages = \JFactory::getApplication()->getMessageQueue();
// Build the sorted message list
if (is_array($messages) && !empty($messages))
{
    foreach ($messages as $msg)
    {
        if (isset($msg['type']) && isset($msg['message']))
        {
            $lists[$msg['type']][] = $msg['message'];
        }
    }
}

Sau đó, bạn được $listssắp xếp theo cách chính xác.


chỉ là một fyi, bạn có thể hợp lý hóa đoạn trích của mình với các điều chỉnh nhỏ sau: 3v4l.org/DZGWd
mickmackusa
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.