Zeigen Sie Systemmeldungen innerhalb der Komponente anstatt in der Vorlage an

8

Standardmäßig werden Joomla 3-Systemmeldungen (Meldungen, Hinweise, Warnungen) an einer bestimmten Position der Vorlage mit angezeigt

<jdoc:include type="message" />

Wäre es möglich, mehr Kontrolle über diese Nachrichten zu erlangen und sie an verschiedenen Positionen im Container meiner eigenen Komponente anzuzeigen?

Ich habe versucht, den obigen JDOC in den Ansichten meiner Komponente zu verwenden (billiger Schuss), aber kein Glück. Gibt es eine Möglichkeit, von meiner Komponente generierte Nachrichten mit dem Standard-System-Messaging-System von Joomla zu "erfassen" und anzuzeigen, wo immer ich möchte?

Danke im Voraus.

Isidro Baquero
quelle

Antworten:

9

Ok, es sieht so aus, als würde ich ein bisschen mehr graben. Ich habe eine Antwort auf meine eigene Frage gefunden. Grundsätzlich habe ich dieses Plugin gefunden:

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

Es ist nicht genau das, was ich brauche, aber als ich den Code überprüfte, fand ich den Weg heraus, der wie folgt zusammengefasst werden könnte (falls jemand hierher kommt und nach der gleichen Frage sucht):

  1. Wenn Sie es richtig machen möchten, müssen Sie sich um die Joomla-Nachrichten kümmern, die in der Vorlage über angezeigt werden <jdoc:include type="message" />, damit Nachrichten nicht zweimal angezeigt werden
  2. Die einzige Möglichkeit, dies zu handhaben, ist die Verwendung eines Plugins, das beim Ereignis onBeforeRender ausgelöst wird
  3. In diesem Fall müssen Sie:
    • Rufen Sie die Nachrichten mit ab $app = JFactory::getApplication(); $messageQueue = $app->getMessageQueue();
    • Verarbeiten Sie die Nachrichten nach Bedarf, um sie in Ihrer Komponente auszugeben
    • Löschen Sie die Nachrichtenwarteschlange, damit Nachrichten nicht zweimal angezeigt werden. In früheren Joomla-Versionen war es möglich, die Warteschlange direkt mit einer Methode zu löschen. In Joomla 3 müssen Sie jedoch die vorhandene Warteschlange durch eine leere ersetzen
  4. Das war's, Sie haben Nachrichten im Joomla-Nachrichtensystem der Standardeinstellung in Ihrer Komponente verfügbar.

Dies erfordert einige Arbeit, aber ich denke, der allgemeine Weg ist klar. Hoffe, es ist nützlich für jemand anderen in einer ähnlichen Situation.

Isidro Baquero
quelle
0

Um diese (gute) Antwort von Isidro zu vervollständigen, beachten Sie, dass ab heute (Joomla 3.8.12) die getMessageQueue()Funktion mit "true" ( getMessageQueue(true)) als Parameter zum Löschen / Löschen der Nachrichtenwarteschlange aufgerufen werden kann .

Rufen Sie diesen Code (extrahiert aus MessageRenderer::getData()) auf, um die Nachrichten in der erwarteten Weise zu speichern, damit das Layout sie anzeigen kann :

// 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'];
        }
    }
}

Dann werden Sie richtig $listssortiert.

Fred der Kodierer
quelle
Nur zu Ihrer Information
optimieren