J'ai un plugin où j'essaye d'instancier une nouvelle classe, mais chaque fois que le plugin était activé, la page continuait de mourir en disant que l'objet existait déjà. Après enquête, j'ai découvert que cela ne se produit que dans la page Catégorie et non dans la page Article.
J'ai donc tout supprimé du code et le code suivant:
class plgContentFoobar extends JPlugin
{
public function onContentPrepare($context, &$row, &$params, $page = 0)
{
echo 1;
}
}
Sur la page Article, il ne sort qu'une fois comme prévu, mais sur une page de catégorie; il sort 15 fois. Dois-je savoir quoi que ce soit qui cause cela sur les pages de catégorie?
Bien, la fonction est exécutée 15 fois et vous avez 14 articles affectés à une catégorie.
Si vous ouvrez le fichier suivant:
composants\com_content\views\article\view.html.php
vous voyez l'événement distribué sur la ligne 161:
$dispatcher->trigger('onContentPrepare', array ('com_content.article', &$item, &$item->params, $offset));
Puis dans ce fichier:
composants\com_content\views\category\view.html.php
Vous le voyez également envoyé sur la ligne 106:
$dispatcher->trigger('onContentPrepare', array ('com_content.category', &$item, &$item->params, 0));
Comme vous êtes dans la vue des catégories et que vous avez 14 articles affectés à la catégorie, le onContentPrepare
est distribué 14 fois, puis ne fois à nouveau à partir de la vue des catégories.
Les plugins Contnet se déclenchent sur chaque portion de contenu - chaque module, chaque article sur une page de blog, etc. Si vous souhaitez remplacer quelque chose qui ne gêne pas l'exécution d'un plugin, vous devez utiliser un plugin système et onAfterRender
function onAfterRender() {
$body = JResponse::getBody();
// replace what you need in the $body
JResponse::setBody($body);
}