Project

General

Profile

Systeme de Plugins » History » Version 12

Simon, 02/19/2014 11:41 AM

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 2 Simon
# La présence d'un fichier <code>__install__.php</code> permettra lors de l'installation du plugin d'effectuer des actions relative à sa mise en oeuvre, par exemple, l'ajout d'une table dans la base de données, la modification d'un fichier, ...
36 1 Simon
37
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.
38
39 4 Simon
40
h2. L'objet plugin
41
42
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>.
43
44
Par exemple : 
45 9 Simon
<pre><code class="php">
46 4 Simon
echo $plug->getVar('name');
47
echo $plug->getVar('shortname');
48
49
// renverra le nom du plugin
50
// puis le nom du plugin privé du préfixe l21_
51
</code>
52
</pre>
53
54
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.
55
56 12 Simon
h2. Balises autorisées
57 4 Simon
58 12 Simon
* _pluginname_ : nom du plugin
59
* _description_ : description du plugin au format texte
60
* _version_ : numéro de version
61
* _date_ : date de la version du plugin
62
* _compatibility_ : versions avec lesquelles le plugin est compatible
63
* _author_ : nom de l'auteur
64
* _homepage_ : Lien vers la page web de l'auteur
65
* _default_language_ : Langage utilisé par défaut par le plugin (dans le cas où la langue courante n'est pas pris en charge)
66
* _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.
67
* _image_ (optionnelle) : nom du fichier pointant vers l'image illustrant le plugin
68
* _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_).
69
* _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.
70
* _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>
71
72
73 1 Simon
h2. Exemple de fichier plugin.xml
74
75
<pre><code class="xml">
76
<?xml version="1.0" encoding="UTF-8"?>
77
<plugin>
78
	<pluginname>l21_gotoTop</pluginname>
79
	<description>Add a go to Top button on each pages</description>
80
	<version>1</version>
81
	<date>22-01-2012</date>
82
	<compatibility>1.5 +</compatibility>
83
	<author>Simon Georget</author>
84 4 Simon
	<homepage>http://www.empreinte-urbaine.eu</homepage>
85 1 Simon
	<default_language>fr</default_language>
86
        <image>plugin.png</image>
87
	<apps>
88
		<app>public</app>
89
		<app>admin</app>
90
	</apps>
91 12 Simon
	<restricted_edition>
92
		<file>config.php</file>
93
		<file>mypaswwords.php</file>
94
	</restricted_edition>
95 1 Simon
</plugin>
96
</code>
97
</pre>
98
99
100
h2. Exemple de l'architecture d'un plugin 
101
102 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.
103 1 Simon
104 3 Simon
!plugin.png!
105
106
107
Pour accéder au code source du plugin, "suivez le lien":http://dev.linea21.com/projects/linea21/repository/show/trunk/v1/plugins/l21_gotoTop.
108 10 Simon
109
110
h2. Le stockage et l'accès aux données d'un plugin
111
112
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).
113
114
Les méthodes _storesValues()_ et _retrieveValues()_ disponibles dans la classe _class.plugin.php_ permettent aisément de manipuler les données.
115
116 11 Simon
!plugin_db.png!