web-dev-qa-db-fra.com

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

Par défaut, les messages système de Joomla 3 (messages, avis, 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 dans le conteneur de mon propre composant?

J'ai essayé d'utiliser le jdoc ci-dessus dans les vues de mon composant (tir bas), mais pas de chance. Est-il possible 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ù bon me semble?

Merci d'avance.

8
Isidro Baquero

Ok, on dirait qu’on a creusé un peu plus, j’ai trouvé une réponse à ma propre question. En gros, j'ai trouvé ce plugin:

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

Ce n'est pas exactement ce dont j'ai besoin, mais en vérifiant le code, j'ai trouvé le chemin à suivre, ce qui pourrait se résumer comme suit (au cas où quelqu'un viendrait chercher la même question):

  1. Si vous voulez le faire correctement, vous devez vous occuper des messages Joomla par défaut affichés dans le modèle via <jdoc:include type="message" />, Afin que les messages ne s'affichent pas deux fois.
  2. La seule façon de gérer cela consiste à utiliser un plugin qui sera déclenché sur l'événement onBeforeRender
  3. Dans ce cas, vous devez:
    • Récupérer les messages en utilisant $app = JFactory::getApplication(); $messageQueue = $app->getMessageQueue();
    • Traitez les messages selon vos besoins pour les sortir dans votre composant
    • Effacez la file de 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 avec une méthode, mais dans Joomla 3, vous devez remplacer la file existante par une autre
  4. Ça y est, vous avez des messages mis en file d'attente dans le système de messagerie Joomla par défaut disponible dans votre composant.

Cela nécessite du 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.

9
Isidro Baquero

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

Enfin, pour obtenir les messages stockés de la manière attendue pour que la présentation les affiche, appelez cette partie de code (extraite 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 obtenez $lists triés de manière correcte.

0
Fred the coder