it-swarm-eu.dev

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

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.

8
Isidro Baquero

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/2524

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 usando $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 richiede un po 'di lavoro, ma penso che il percorso complessivo da seguire sia chiaro. Spero sia utile per qualcun altro in una situazione simile.

9
Isidro Baquero

Per completare questa (buona) risposta di Isidro, nota che ad oggi (Joomla 3.8.12), la funzione getMessageQueue() 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 ottieni $lists ordinati nel modo corretto.

0
Fred the coder