Systeme de Plugins » History » Version 14
  Simon, 11/10/2014 09:53 PM 
  
| 1 | 1 | Simon | h1. Système de Plugins | 
|---|---|---|---|
| 2 | |||
| 3 | 5 | Simon | |
| 4 | 7 | Simon | h2. Téléchargement d'un plugin | 
| 5 | |||
| 6 | Pour télécharger un plugin, utilisez svn. Par exemple : | ||
| 7 | |||
| 8 | <pre> | ||
| 9 | svn co http://dev.linea21.com/svn/linea21-plugins/trunk/l21_gotoTop/ | ||
| 10 | </pre> | ||
| 11 | |||
| 12 | 8 | Simon | La liste des plugins disponibles est accessible via le "dépôt":http://dev.linea21.com/projects/linea21/repository/linea21-plugins?path[]=trunk. | 
| 13 | |||
| 14 | 6 | Simon | h2. Installation d'un plugin | 
| 15 | 5 | Simon | |
| 16 | *Pré-requis* : Avant d'installer un plugin, vous devez vous assurer que le *MOD_PLUGIN* est bien actif. Pour cela, depuis l'interface d'administration, allez sur _Configurer_ > _Système_. Déplier l'onglet _Configuration système (define_release)_. Passez en mode édition et changez la valeur de *MOD_PLUGIN* à 1. Enregistrez les modifications. | ||
| 17 | 1 | Simon | Dès lors que le *MOD_PLUGIN* est activé, le sous-menu _Plugins_ apparaît dans l'onglet _Configurer_. | 
| 18 | 5 | Simon | |
| 19 | 7 | Simon | # Placez le plugin téléchargé (par exemple _l21_gotoTop_) dans le dossier /plugins/ de l'application | 
| 20 | 6 | Simon | # Donner les permissions nécessaires à l'utilisateur apache sur le dossier. Cette étape est nécessaire car l'application doit pouvoir écrire dans le répertoire. Par exemple : | 
| 21 | 1 | Simon | * <code>chown www-data:www-data /plugins/l21_monplugin/</code> | 
| 22 | 5 | Simon | * <code>chmod -R 0755 /plugins/l21_monplugin/</code> | 
| 23 | # Vous pouvez à présent vous rendre sur la page des plugins en cliquant sur _Configurer_ > _Plugins_. Le plugin nouvellement installé doit apparaître. Vous devez à présent l'activer en cliquant sur le lien adéquat. Votre plugin est installé! | ||
| 24 | 6 | Simon | |
| 25 | 5 | Simon | |
| 26 | |||
| 27 | 1 | Simon | h2. Architecture d'un plugin | 
| 28 | |||
| 29 | L'architecture d'un plugin doit se conformer à quelques règles. | ||
| 30 | |||
| 31 | # D'abord en ce qui concerne le nommage, le plugin doit nécessairement être préfixé de *l21_* | ||
| 32 | 2 | Simon | # Il doit contenir un fichier <code>plugin.xml</code> qui renseignera les méta-informations (nom, auteur, compatibilité, date de sortie, portée du plugin ...) | 
| 33 | # Il doit nécessairement disposé d'un fichier nommé <code>__init__.php</code>. Ce fichier sera exécuté à chaque appel de page. C'est lui qui instancie le plugin et permettra donc son exécution. | ||
| 34 | 1 | Simon | # Si le plugin fait appel à des fichiers de langue, il doit impérativement reproduire la structure applicative. Il contient alors un répertoire nommé languages et autant de sous-répertoires pour les langues (par exemple _fr_ et _en_). Tous les fishiers contenus dans les sous-répertoires seront chargés lors de l'instanciation du plugin. | 
| 35 | 14 | Simon | # La présence d'un fichier <code>__install__.php</code> permettra lors de l'installation du plugin d'effectuer des actions relatives à sa mise en oeuvre, par exemple, l'ajout d'une table dans la base de données, la modification d'un fichier, ... | 
| 36 | # Le fichier <code>__uninstall__.php</code> permettra lors de la désactivation du plugin d'effectuer des actions particulières : par exemple, la suppression d'une table dans la base de données ou d'un fichier, ... | ||
| 37 | |||
| 38 | 1 | Simon | |
| 39 | Pour le reste, vous avez une totale liberté dans l'organisation de votre plugin. Veillez toutefois à proposer une structure claire, afin que celui-ci puisse être amélioré ou repris par un autre utilisateur. | ||
| 40 | |||
| 41 | 4 | Simon | |
| 42 | h2. L'objet plugin | ||
| 43 | |||
| 44 | Chaque plugin est instancié par la classe "plugin":http://dev.linea21.com/projects/linea21/repository/changes/trunk/v1/class/class.plugin.php. Les propriétés de l'objet sont ainsi rendues disponibles via la variable globale <code>$plug</code>. | ||
| 45 | |||
| 46 | Par exemple : | ||
| 47 | 9 | Simon | <pre><code class="php"> | 
| 48 | 4 | Simon | echo $plug->getVar('name'); | 
| 49 | echo $plug->getVar('shortname'); | ||
| 50 | |||
| 51 | // renverra le nom du plugin | ||
| 52 | // puis le nom du plugin privé du préfixe l21_ | ||
| 53 | </code> | ||
| 54 | </pre> | ||
| 55 | |||
| 56 | Référez-vous à "la classe":http://dev.linea21.com/projects/linea21/repository/changes/trunk/v1/class/class.plugin.php pour connaître les attributs de l'objet et les méthodes qui y sont liées. | ||
| 57 | |||
| 58 | 13 | Simon | h2. Balises standards | 
| 59 | 4 | Simon | |
| 60 | 12 | Simon | * _pluginname_ : nom du plugin | 
| 61 | * _description_ : description du plugin au format texte | ||
| 62 | * _version_ : numéro de version | ||
| 63 | * _date_ : date de la version du plugin | ||
| 64 | * _compatibility_ : versions avec lesquelles le plugin est compatible | ||
| 65 | * _author_ : nom de l'auteur | ||
| 66 | * _homepage_ : Lien vers la page web de l'auteur | ||
| 67 | * _default_language_ : Langage utilisé par défaut par le plugin (dans le cas où la langue courante n'est pas pris en charge) | ||
| 68 | * _apps_ : La balise <apps> définit la portée du plugin. Elle peut comporter un ou plusieurs tags enfants (<app>), selon que le plugin est utile à l'interface publique, à l'interface d'administration ou au deux -comme dans l'exemple ci-dessous. | ||
| 69 | * _image_ (optionnelle) : nom du fichier pointant vers l'image illustrant le plugin | ||
| 70 | * _settings_ (optionnelle) : prend la valeur _0_ ou _1_. Indique si le plugin est configurable ou non. S'il l'est, l'auteur du plugin doit fournir la logique applicative et l'interface (fichier _index.php_). | ||
| 71 | * _load_on_settings_ (optionnelle) : prend la valeur _0_ ou _1_. Indique si le plugin doit être éxécuté lors de la consultation de la page de configuration. | ||
| 72 | * _restricted_edition_ (optionnelle) : par défaut, les fichiers de plugins sont accessibles en lecture/écriture depuis l'éditeur en ligne. La balise <restricted_edition> permet de spécifier des fichiers à ignorer, via l'utilisation de balises enfants <file> | ||
| 73 | |||
| 74 | |||
| 75 | 1 | Simon | h2. Exemple de fichier plugin.xml | 
| 76 | |||
| 77 | <pre><code class="xml"> | ||
| 78 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 79 | <plugin> | ||
| 80 | <pluginname>l21_gotoTop</pluginname> | ||
| 81 | <description>Add a go to Top button on each pages</description> | ||
| 82 | <version>1</version> | ||
| 83 | <date>22-01-2012</date> | ||
| 84 | <compatibility>1.5 +</compatibility> | ||
| 85 | <author>Simon Georget</author> | ||
| 86 | 4 | Simon | <homepage>http://www.empreinte-urbaine.eu</homepage> | 
| 87 | 1 | Simon | <default_language>fr</default_language> | 
| 88 | <image>plugin.png</image> | ||
| 89 | <apps> | ||
| 90 | <app>public</app> | ||
| 91 | <app>admin</app> | ||
| 92 | </apps> | ||
| 93 | 12 | Simon | <restricted_edition> | 
| 94 | <file>config.php</file> | ||
| 95 | <file>mypaswwords.php</file> | ||
| 96 | </restricted_edition> | ||
| 97 | 1 | Simon | </plugin> | 
| 98 | </code> | ||
| 99 | </pre> | ||
| 100 | |||
| 101 | |||
| 102 | h2. Exemple de l'architecture d'un plugin | ||
| 103 | |||
| 104 | 3 | Simon | La capture d'écran ci-dessous décrit l'architecture du plugin l21_gotoTop affichant une flèche permettant à l'utilisateur de revenir en haut de page à tout moment. | 
| 105 | 1 | Simon | |
| 106 | 3 | Simon | !plugin.png! | 
| 107 | |||
| 108 | |||
| 109 | Pour accéder au code source du plugin, "suivez le lien":http://dev.linea21.com/projects/linea21/repository/show/trunk/v1/plugins/l21_gotoTop. | ||
| 110 | 10 | Simon | |
| 111 | |||
| 112 | h2. Le stockage et l'accès aux données d'un plugin | ||
| 113 | |||
| 114 | Depuis la version 1.6, Linea21 permet de stocker des informations relatives au plugin en base de données. La table l21_plugins permet de stocker un tableau sérialisé de paramètres dans le champ _plugin_values_ (au format TEXT). | ||
| 115 | |||
| 116 | Les méthodes _storesValues()_ et _retrieveValues()_ disponibles dans la classe _class.plugin.php_ permettent aisément de manipuler les données. | ||
| 117 | |||
| 118 | 11 | Simon | !plugin_db.png! |