Ho un plug-in in cui sto provando a creare un'istanza di una nuova classe ma ogni volta che il plug-in è stato abilitato, la pagina continua a morire dicendo che l'oggetto esiste già. All'indagine, ho scoperto che succede solo nella pagina delle categorie e non nella pagina degli articoli.
Quindi ho rimosso tutto dal codice e avevo il seguente codice:
class plgContentFoobar extends JPlugin
{
public function onContentPrepare($context, &$row, &$params, $page = 0)
{
echo 1;
}
}
Nella pagina dell'articolo, viene prodotto solo una volta come previsto, ma su una pagina di categoria; esce 15 volte. C'è qualcosa di cui devo essere consapevole che sta causando questo nelle pagine delle categorie?
Bene, quindi la funzione viene eseguita 15 volte e hai 14 articoli assegnati a una categoria.
Se si apre il seguente file:
componenti\com_content\vista\articolo\view.html.php
vedi l'evento inviato on line 161:
$dispatcher->trigger('onContentPrepare', array ('com_content.article', &$item, &$item->params, $offset));
Quindi in questo file:
componenti\com_content\vista\categoria\view.html.php
Lo vedi anche spedito on line 106:
$dispatcher->trigger('onContentPrepare', array ('com_content.category', &$item, &$item->params, 0));
Dato che sei nella vista categoria e hai 14 articoli assegnati alla categoria, onContentPrepare
viene inviato 14 volte e quindi na volta di nuovo dalla vista categoria.
I plug-in Contnet si attivano su ogni porzione di contenuto: ogni modulo, ogni articolo su una pagina del blog e così via. Se vuoi sostituire qualcosa che non funziona in una corsa di un plugin, dovresti usare un plugin di sistema e onAfterRender
function onAfterRender() {
$body = JResponse::getBody();
// replace what you need in the $body
JResponse::setBody($body);
}