it-swarm-eu.dev

Il plug-in di contenuto "carica" ​​più volte nella pagina delle categorie

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?

2
sifu

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.

3
Lodder

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);
   }
1
Gruz