Chapitre: Développer et utiliser des plugins
« Surcharge de fichiers de modules | ^ Développement avancé | La configuration en détails » |
− Table des matières
Il existe toutes sortes de plugins pour ajouter des fonctionnalités à diverses parties de Jelix. On peut ainsi ajouter des plugins pour le coordinateur, des drivers pour jDb, des drivers pour jAuth, des plugins pour jTpl...
Tous les plugins sont regroupés dans des "dépôts" de plugins.
Déclaration d'un dépôt de plugins ¶
Vous pouvez déclarer un ou plusieurs dépôts de plugins. Un dépôt est un répertoire ayant une structure précise (voir plus loin).
Il faut déclarer ces dépôts de plugins avec jApp
ou dans le fichier
composer.json si vous avez installé Jelix avec Composer. (dans les versions 1.6
et inférieurs, c'était dans la configuration, avec la propriété
pluginsPath).
Un exemple avec jApp
dans application.init.php
:
jApp::declarePluginsDir(__DIR__.'/plugins/');
Ici il est indiqué le répertoire plugins
dans votre application.
D'autres répertoires sont déclarés implicitement et automatiquement : celui de Jelix
qui est le répertoire lib/jelix/plugins/
et contenant les plugins
livrés en standard, et aussi tous les répertoires plugins/
présents dans
les modules activés.
Si vous avez installé des paquets pour Jelix avec Composer, les répertoires de plugins peuvent être déclaré automatiquement en les spécifiant dans le fichier composer.json des paquets.
{
...
"extra" : {
"jelix": {
"plugins-dir" : [
"plugins/",
]
}
}
}
Ici on déclare le répertoire plugins/
qui est situé dans le même
répertoire que le composer.json
.
Cela fonctionne aussi avec le fichier composer.json de l'application.
Structure d'un dépôt ¶
Un dépôt de plugins contient un répertoire pour chaque type de plugins et dans chacun de ces répertoires, un répertoire pour chaque plugin.
Voici quelques types de plugins et les répertoires correspondant :
- plugins de coordinateur :
coord/
- plugins pour jLog :
logger/
- drivers pour jAuth :
auth/
- drivers pour jAcl2 :
acl2/
- drivers pour jDb :
db/
- drivers pour jDao :
daobuilder/
- plugins de templates :
tpl/
- générateurs pour jForms :
jforms/
- drivers pour jKVdb :
kvdb/
- drivers pour jCache :
cache/
- plugins pour la debugbar :
debugbar/
- plugins pour jResponseHtml :
htmlresponse/
- plugins pour jProfiles :
profiles/
Chargement d'un plugin ¶
Les composants qui utilisent des plugins les instancient grâce à la méthode
jApp::loadPlugin()
. Vous pourriez aussi en avoir besoin pour par exemple
récupérer des informations fournies par le plugin (configuration etc..), ou
l'utiliser indépendamment du composant qui utilise normalement le plugin.
Pour l'instancier, il faut indiquer en paramètre le nom du plugin, le type de plugin ('db', 'acl'...), le suffix du nom du fichier ('.dbconnection.php'..), le nom de la classe ('mysqliDbConnection') et enfin le paramètre du constructeur si il existe.
$plugin = jApp::loadPlugin('mysqli'', 'db', '.dbconnection.php', 'mysqliDbConnection', 'default');
Vous remarquerez qu'il n'est pas possible d'indiquer plusieurs paramètres au
constructeur. Vous pouvez alors simplement inclure le plugin avec jApp::includePlugin()
, et l'instancier
vous même. Cette méthode prend les même paramètres que loadPlugin()
, sans le
paramètre pour le constructeur.
jApp::includePlugin('mysqli'', 'db', '.dbconnection.php', 'mysqliDbConnection');
$plugin = new mysqliDbConnection('default');
Création de plugins ¶
Jelix fournit en standard un certain nombre de plugins dans le dépôt
lib/jelix/plugins/
. Cependant, il est souvent nécessaire de devoir en
créer pour ses propres besoins. D'ailleurs toute contribution de nouveaux
plugins est vivement encouragée ;-)
Les sections suivantes vous indiquent comment développer certains de ces plugins.