web-dev-qa-db-fra.com

Comment Joomla! système d'événement (plugins) éviter les conflits d'espace de noms?

Si j'ai bien compris, utiliser Joomla! plugin events de mon code utilisateur, je dois d’abord charger la classe plugin (qui enregistre les fonctions nommées en tant qu’événements dans le répartiteur d’événements):

JPluginHelper::importPlugin('captcha');

Ensuite, je peux déclencher des événements à partir de mon code d'utilisateur:

$dispatcher = JDispatcher::getInstance();
trigger('onInit');

Comment le système de plug-in gère-t-il les collisions de noms entre événements? Par exemple, les plugins captcha ont une fonction/événement onDisplay, tout comme les plugins editor. Que se passe-t-il lorsque j'appelle le suivant après le code précédent?

JPluginHelper::importPlugin('editor');
trigger('onDisplay');

Je crois que cela déclenchera l'événement onDisplay à la fois sur le groupe de plug-ins captcha et sur le groupe de plug-ins editor. Il semble que la méthode trigger de JEventDispatcher aurait besoin d'un paramètre pour au moins le groupe de plug-ins sur lequel agir. Est-ce que je reçois tous les plugins avec une fonction onDisplay et je dois trier ce qui est garbage? Que se passe-t-il si un plugin non pertinent fonctionnant avec une entrée résiduelle a une exception sur cette entrée?

2
calligraphic-io

Si vous voulez mieux comprendre comment Joomla! les plugins fonctionnent Je vous recommande de lire ce livre génial d'un Joomla avancé! développeur Jisse Reitsma.

Dans Joomla! Tous les plugins sont déclenchés par des groupes dans un ordre donné, en fonction de leur ordre dans la page d'administration des plugins de Joomla! backend. Si un plugin du groupe "A" envoie une "entrée de mémoire" comme vous le dites, avant un autre plugin avec le même groupe "A" et le même événement "E", le premier plugin sera prioritaire s'il y a une erreur mais si il n'y a pas d'erreur, le dernier plugin du même groupe "A" peut toujours modifier l'entrée si cette entrée est envoyée par référence. (en utilisant et esperluette & avant).

Il existe un autre groupe de plugins spécial appelé "système" utilisé pour les plugins système. Le plugin système peut intercepter et manipuler n'importe quel événement dans Joomla! mais ils ont les mêmes lois de préséance. Le dernier plug-in système aura la possibilité de modifier les données d'entrée si les plug-ins précédents ne contiennent pas d'erreur.

Méfiez-vous des erreurs de plug-in système, en raison de la nature d'un plug-in système (chargé très bientôt dans le processus de démarrage de Joomla!). Si une erreur fatale se produit, elle peut endommager votre Joomla! site.

J'espère que ça vous aidera à partir d'ici.

Programmation de plugins Joomla

De plus, vous pouvez trouver le code associé au livre https://github.com/jissereitsma/JoomlaPluginsBook

2
alexandreelise