Afficher les messages système à l'intérieur du composant plutôt que dans le modèle

8

Par défaut, les messages système Joomla 3 (messages, notifications, avertissements) sont affichés dans une certaine position du modèle à l'aide de

<jdoc:include type="message" />

Serait-il possible d'obtenir plus de contrôle sur ces messages et de les afficher dans différentes positions à l'intérieur du conteneur de mon propre composant?

J'ai essayé d'utiliser le jdoc ci-dessus dans les vues de mon composant (photo bon marché) mais pas de chance. Existe-t-il un moyen de "capturer" les messages générés par mon composant à l'aide du système de messagerie système standard de Joomla et de les afficher où je veux?

Merci d'avance.

Isidro Baquero
la source

Réponses:

9

Ok, on dirait creuser un peu plus j'ai trouvé une réponse à ma propre question. Fondamentalement, j'ai trouvé ce plugin:

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

Ce n'est pas exactement ce dont j'ai besoin, mais en vérifiant son code, j'ai trouvé le chemin à parcourir, qui pourrait être résumé comme suit (au cas où quelqu'un arriverait ici à la recherche de la même question):

  1. Si vous voulez le faire de la bonne façon, vous devez prendre soin des messages Joomla par défaut affichés dans le modèle via <jdoc:include type="message" />, afin que les messages ne soient pas affichés deux fois
  2. La seule façon de gérer cela est d'utiliser un plugin qui sera déclenché lors de l'événement onBeforeRender
  3. Dans ce cas, vous devez:
    • Récupérez les messages en utilisant $app = JFactory::getApplication(); $messageQueue = $app->getMessageQueue();
    • Traitez les messages au besoin pour les afficher dans votre composant
    • Videz la file d'attente des messages afin que les messages ne s'affichent pas deux fois. Dans les versions précédentes de Joomla, il était possible d'effacer directement la file d'attente avec une méthode, mais dans Joomla 3, vous devez remplacer la file d'attente existante par une vide
  4. Voilà, vous avez des messages mis en file d'attente dans le système de messagerie Joomla par défaut disponibles dans votre composant.

Cela nécessite un certain travail, mais je pense que la voie à suivre est claire. J'espère que c'est utile pour quelqu'un d'autre dans une situation similaire.

Isidro Baquero
la source
0

Pour compléter cette (bonne) réponse d'Isidro, notez qu'à partir d'aujourd'hui (Joomla 3.8.12), la getMessageQueue()fonction peut être appelée avec "true" ( getMessageQueue(true)) comme paramètre pour purger / effacer la file d'attente de messages.

Enfin, pour obtenir les messages stockés de la manière attendue pour que la mise en page les affiche, appelez ce morceau de code (extrait de 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'];
        }
    }
}

Ensuite, vous êtes $liststrié de la bonne manière.

Fred le codeur
la source
juste un info, vous pouvez rationaliser votre extrait de code
mickmackusa