Tampilkan pesan sistem di dalam komponen alih-alih dalam templat

8

Secara default, sistem pesan Joomla 3 (pesan, pemberitahuan, peringatan) ditampilkan dalam posisi tertentu menggunakan templat

<jdoc:include type="message" />

Mungkinkah mendapatkan kontrol yang lebih besar atas pesan-pesan itu dan menampilkannya di berbagai posisi di dalam wadah komponen saya sendiri?

Saya sudah mencoba menggunakan jdoc di atas di dalam tampilan komponen saya (tembakan murah) tetapi tidak berhasil. Apakah ada cara saya dapat "menangkap" pesan yang dihasilkan oleh komponen saya menggunakan sistem pesan sistem standar Joomla dan menampilkannya di mana pun saya mau?

Terima kasih sebelumnya.

Isidro Baquero
sumber

Jawaban:

9

Ok, sepertinya menggali sedikit lebih banyak Saya menemukan jawaban untuk pertanyaan saya sendiri. Pada dasarnya saya menemukan plugin ini:

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

Ini bukan apa yang saya butuhkan, tetapi memeriksa kodenya saya menemukan cara untuk pergi, yang dapat diringkas sebagai berikut (jika seseorang datang ke sini mencari pertanyaan yang sama):

  1. Jika Anda ingin melakukannya dengan cara yang benar, Anda harus menjaga pesan Joomla default yang ditampilkan di templat melalui <jdoc:include type="message" />, sehingga pesan tidak ditampilkan dua kali
  2. Satu-satunya cara untuk mengatasinya adalah menggunakan plugin yang akan dipicu pada acara onBeforeRender
  3. Dalam hal itu Anda perlu:
    • Ambil pesan menggunakan $app = JFactory::getApplication(); $messageQueue = $app->getMessageQueue();
    • Proses pesan sesuai kebutuhan untuk menampilkannya di komponen Anda
    • Hapus antrian pesan, sehingga pesan tidak ditampilkan dua kali. Di versi Joomla sebelumnya, dimungkinkan untuk menghapus antrian secara langsung dengan metode, tetapi di Joomla 3 Anda perlu mengganti antrian yang ada dengan yang kosong
  4. Itu saja, Anda memiliki pesan enqueued dalam sistem pesan Joomla default yang tersedia di komponen Anda.

Ini perlu beberapa pekerjaan, tapi saya pikir jalur keseluruhan untuk mengikuti jelas. Semoga bermanfaat bagi orang lain dalam situasi serupa.

Isidro Baquero
sumber
0

Untuk menyelesaikan jawaban (baik) dari Isidro ini, perhatikan bahwa mulai hari ini (Joomla 3.8.12), getMessageQueue()fungsi tersebut dapat dipanggil dengan "true" ( getMessageQueue(true)) sebagai parameter untuk membersihkan / menghapus antrian pesan.

Akhirnya, untuk mendapatkan pesan yang disimpan dengan cara yang diharapkan agar tata letak menampilkannya, panggil bagian kode ini (diekstraksi dari 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'];
        }
    }
}

Kemudian Anda $listsdisortir dengan cara yang benar.

Fred si pembuat kode
sumber
hanya fyi, Anda dapat merampingkan cuplikan Anda dengan tweak kecil ini: 3v4l.org/DZGWd
mickmackusa