-
Notifications
You must be signed in to change notification settings - Fork 27
Plugins
Pour Lodel 0.9+ : implémentation d'un système de plugin
Seuls les administreurs Lodel peuvent installer/désinstaller un plugin via la partie administration Lodel. Il est également possible de modifier la configuration par défaut du plugin qui sera effective par défaut à l'activation du plugin pour un site, et/ou de l'activer/désactiver pour l'intégralité de l'installation.
À partir de là, il est possible pour chaque site d'activer/désactiver et configurer un plugin installé via la partie administration du site.
Pour le moment, 8 triggers sont disponibles :
- preauth : déclenché avant l'authentification de l'utilisateur
- postauth : déclenché après l'authentification de l'utilisateur
- prelogin : déclenché avant le login de l'utilisateur
- postlogin : déclenché après le login de l'utilisateur
- preview : déclenché avant l'affichage d'une page
- postview : déclenché après l'affichage d'une page
- preedit : déclenché avant l'exécution d'une action par le controlleur
- postedit : déclenché après l'exécution d'une action par le controlleur
Un plugin est un répertoire contenu dans /share/plugins/custom/. Le nom du répertoire correspond au nom du plugin. Au minimum, le plugin doit contenir les fichiers suivants :
- config.xml : fichier XML de configuration.
- nom_du_plugin.php : une classe ou des fonctions
Le fichier de configuration doit contenir au moins une information qui correspond au type d'appel qui sera effectué par Lodel : 'hookType', qui peut avoir comme valeur 'class' ou 'func', qui désignent respectivement que le plugin est développé en utilisant une classe, ou des fonctions.
Voici un exemple commenté d'un fichier de configuration :
<?xml version="1.0" encoding="utf-8" ?> <LodelPlugin> <title>nom du plugin</title> <description>description du plugin</description> <sql>0</sql> <hookType>class</hooktype> <triggers>preview,preedit,postedit</triggers> <parameters> <param name="authorized_tags" title="Balises HTML autorisées" type="text" defaultValue="em,strong,h1,h2,h3,sup,span,a" allowedValues="" required="true"/> <param name="userrights" title="Droits utilisateurs" type="select" allowedValues="20,30,40,128" defaultValue="40" required="true"/> </parameters> </lodelplugin>
Vous pouvez utiliser les variables de traductions dans le title du plugin ainsi que le title des paramètres. Pour celà, mettre un underscore '_' en début du title :
title="_site" // sera transformé en [@LODELADMIN.SITE]
Voici un exemple d'un plugin rajoutant le temps de calcul de la page en commentaire HTML, seulement pour les utilisateurs authentifié avec un niveau supérieur à visiteur. Il utilise le trigger 'postview' déclenché après la génération de la page, et la variable statique $microtime contenant l'heure de début de génération de la page.
<?php // ma classe doit absolument étendre la classe de base 'Plugins' class monPlugin extends Plugins { // pas besoin d'initialiser quoique ce soit à l'activation/désactivation du plugin // il faut toutefois les déclarer pour respecter la cohérence avec la classe parente public function enableAction(&$context, &$error) {} public function disableAction(&$context, &$error) {} public function postview(&$context) { if(!parent::_checkRights(LEVEL_REDACTOR)) { return; } // on récupère le contenu de la page $page = View::$page; // on récupère l'heure de début de génération $time = View::$microtime; // on calcule et concatène le temps de génération au contenu de la page $page .= ''; // on remplace le contenu de la page dans la vue View::$page = $page; } } ?>
Le même plugin n'utilisant pas de classe :
function monPlugin_postview(&$context) { if(!C::get('redactor', 'lodeluser')) { return; } // on récupère le contenu de la page $page = View::$page; // on récupère l'heure de début de génération $time = View::$microtime; // on calcule et concatène le temps de génération au contenu de la page $page .= ''; // on remplace le contenu de la page dans la vue View::$page = $page; }
Tous les détails : http://blog.lodel.org/173