web-dev-qa-db-fra.com

Joomla mise en cache et plugins

Comment la mise en cache affecte-t-elle les différents déclencheurs de plugins?

J'imagine qu'après la mise en cache d'une page, les autres plug-ins sont ignorés jusqu'à ce que l'heure du cache soit réinitialisée et que la page soit recréée.

1
Mat Kay

Cela dépend du système de mise en cache que vous utilisez (Joomla en a trois) et des composants (car différents composants peuvent déclencher des événements de plug-in à différents points de leur chemin d'exécution).

Par exemple, si vous mettez en cache en utilisant le plugin System - Page Cache, Alors il n'y a que deux événements de plugin qui vont se déclencher avant qu'une page mise en cache ne soit servie:

L'un est l'événement System> onAfterInitialise() SI le plug-in est commandé de sorte qu'il se trouve avant le plug-in System - Page Cache. Ceci est dû au fait que System> onAfterInitialise() est le premier événement déclenché par Joomla et qu’il est utilisé par System - Page Cache. Il vous faut donc un plugin pour cet événement et avant System - Page Cache.

L'autre est un événement déclenché par le plugin System - Page Cache Lui-même: pagecache> onPageCacheSetCaching(). Cet événement est utilisé pour désactiver la mise en cache pour des conditions spécifiques. Voici un exemple d'utilisation lorsque vous souhaitez un plug-in garantissant que le bot Facebook n'obtient jamais de page en cache. Cet événement est seulement disponible dans Joomla 3.8 (je crois).

En ce qui concerne les deux autres systèmes de mise en cache (Page Cache - Conservative Et Page Cache - Progressive), Cela dépend vraiment du composant. Ils décident si leurs vues peuvent être mises en cache et ils décident quoi et quand déclencher des événements de plug-in. En règle générale, cependant (c’est-à-dire pour com_content et la plupart des autres composants Joomla principaux), le contrôleur décidera de mettre en cache ou non la vue demandée et la plupart des événements de plug-in sont déclenchés dans la vue. En d'autres termes, leurs événements ne se déclencheront pas si la page est mise en cache.

Utilisons par exemple com_content (en supposant une charge frontale non-éditoriale d’une vue com_content):

Dans components/com_content/controller.php, Le premier paramètre de la méthode display() est un booléen qui définit s'il faut ou non mettre la vue en cache une fois qu'elle est construite (et si le fichier mis en cache est mis en serveur, le cas échéant). Tous les déclencheurs d'événement com_content (front-end) (onContentPrepare, onContentAfterTitle, onContentBeforeDisplay, onContentAfterDisplay) sont déclenchés dans les fichiers de vue (ex: voir /views/article/view.html.php). Donc, si la vue en cache est servie, aucun de ces déclencheurs ne se déclenchera (puisque view.html.php N'est pas utilisé).

Un autre composant peut avoir un déclencheur de plug-in avant qu'il ne demande à récupérer le code mis en cache. Dans cette situation, il continuerait à se déclencher, que la vue soit mise en cache ou non.

1
Drew G