Project

General

Profile

Systeme de Plugins » History » Version 11

Simon, 11/14/2012 06:05 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 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
57 1 Simon
h2. Exemple de fichier plugin.xml
58
59
<pre><code class="xml">
60
<?xml version="1.0" encoding="UTF-8"?>
61
<plugin>
62
	<pluginname>l21_gotoTop</pluginname>
63
	<description>Add a go to Top button on each pages</description>
64
	<version>1</version>
65
	<date>22-01-2012</date>
66
	<compatibility>1.5 +</compatibility>
67
	<author>Simon Georget</author>
68
	<homepage>http://www.empreinte-urbaine.eu</homepage>
69
	<default_language>fr</default_language>
70 4 Simon
        <image>plugin.png</image>
71 1 Simon
	<apps>
72
		<app>public</app>
73
		<app>admin</app>
74
	</apps>
75
</plugin>
76
</code>
77
</pre>
78
79
La balise <apps> définit la portée du plugin. Elle peut comporter un ou plusieurs tags, selon que le plugin est utile à l'interface publique, à l'interface d'administration ou au deux -comme dans l'exemple ci-dessus.
80
81
82
h2. Exemple de l'architecture d'un plugin 
83
84 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.
85 1 Simon
86 3 Simon
!plugin.png!
87
88
89
Pour accéder au code source du plugin, "suivez le lien":http://dev.linea21.com/projects/linea21/repository/show/trunk/v1/plugins/l21_gotoTop.
90 10 Simon
91
92
h2. Le stockage et l'accès aux données d'un plugin
93
94
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).
95
96
Les méthodes _storesValues()_ et _retrieveValues()_ disponibles dans la classe _class.plugin.php_ permettent aisément de manipuler les données.
97
98 11 Simon
!plugin_db.png!