Visualizza i messaggi di sistema all'interno del componente anziché nel modello


8

Per impostazione predefinita, i messaggi di sistema di Joomla 3 (messaggi, avvisi, avvisi) vengono visualizzati in una determinata posizione del modello utilizzando

<jdoc:include type="message" />

Sarebbe possibile ottenere un maggiore controllo su quei messaggi e visualizzarli in diverse posizioni all'interno del contenitore del mio componente?

Ho provato a usare il jdoc sopra nelle viste del mio componente (colpo economico) ma senza fortuna. Esiste un modo per "catturare" i messaggi generati dal mio componente usando il sistema di messaggistica di sistema standard di Joomla e visualizzarli dove voglio?

Grazie in anticipo.

Risposte:


9

Ok, sembra che scavando un po 'di più ho trovato una risposta alla mia domanda. Fondamentalmente ho trovato questo plugin:

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

Non è esattamente quello di cui ho bisogno, ma controllando il suo codice ho capito la strada da percorrere, che potrebbe essere riassunta come segue (nel caso in cui qualcuno arrivi qui alla ricerca della stessa domanda):

  1. Se vuoi farlo nel modo giusto, devi prenderti cura dei messaggi Joomla predefiniti visualizzati nel modello tramite <jdoc:include type="message" />, in modo che i messaggi non vengano visualizzati due volte
  2. L'unico modo per gestire l'utilizzo di un plug-in verrà attivato sull'evento onBeforeRender
  3. In tal caso è necessario:
    • Recupera i messaggi utilizzando $app = JFactory::getApplication(); $messageQueue = $app->getMessageQueue();
    • Elabora i messaggi secondo necessità per emetterli nel tuo componente
    • Cancella la coda dei messaggi, quindi i messaggi non vengono visualizzati due volte. Nelle versioni precedenti di Joomla, era possibile cancellare direttamente la coda con un metodo, ma in Joomla 3 è necessario sostituire la coda esistente con una vuota
  4. Ecco fatto, hai messaggi accodati nel sistema di messaggistica Joomla predefinito disponibile nel tuo componente.

Questo ha bisogno di un po 'di lavoro, ma penso che il percorso complessivo da seguire sia chiaro. Spero sia utile per qualcun altro in una situazione simile.


0

Per completare questa (buona) risposta di Isidro, si noti che ad oggi (Joomla 3.8.12), la getMessageQueue()funzione può essere chiamata con "true" ( getMessageQueue(true)) come parametro per eliminare / cancellare la coda dei messaggi.

Infine, per ottenere i messaggi memorizzati nel modo previsto per la visualizzazione del layout, chiama questo pezzo di codice (estratto da 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'];
        }
    }
}

Quindi vieni $listsordinato nel modo corretto.


solo una chiacchierata, puoi ottimizzare il tuo frammento con queste piccole modifiche: 3v4l.org/DZGWd
mickmackusa
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.