Raccourcis : Contenu - rubriques - sous rubriques
EN FR

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.