Project

General

Profile

Systeme de Plugins » History » Version 7

Simon, 05/04/2012 04:38 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 6 Simon
h2. Installation d'un plugin
13 5 Simon
14
*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.
15 1 Simon
Dès lors que le *MOD_PLUGIN* est activé, le sous-menu _Plugins_ apparaît dans l'onglet _Configurer_.
16 5 Simon
17 7 Simon
# Placez le plugin téléchargé (par exemple _l21_gotoTop_) dans le dossier /plugins/ de l'application
18 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 :
19 1 Simon
  * <code>chown www-data:www-data /plugins/l21_monplugin/</code>
20 5 Simon
  * <code>chmod -R 0755 /plugins/l21_monplugin/</code>
21
# 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é!
22 6 Simon
23 5 Simon
24
25 1 Simon
h2. Architecture d'un plugin
26
27
L'architecture d'un plugin doit se conformer à quelques règles.
28
29
# D'abord en ce qui concerne le nommage, le plugin doit nécessairement être préfixé de *l21_*
30 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 ...)
31
# 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.
32 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.
33 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, ...
34 1 Simon
35
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.
36
37 4 Simon
38
h2. L'objet plugin
39
40
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>.
41
42
Par exemple : 
43
<pre><code class="xml">
44
echo $plug->getVar('name');
45
echo $plug->getVar('shortname');
46
47
// renverra le nom du plugin
48
// puis le nom du plugin privé du préfixe l21_
49
</code>
50
</pre>
51
52
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.
53
54
55 1 Simon
h2. Exemple de fichier plugin.xml
56
57
<pre><code class="xml">
58
<?xml version="1.0" encoding="UTF-8"?>
59
<plugin>
60
	<pluginname>l21_gotoTop</pluginname>
61
	<description>Add a go to Top button on each pages</description>
62
	<version>1</version>
63
	<date>22-01-2012</date>
64
	<compatibility>1.5 +</compatibility>
65
	<author>Simon Georget</author>
66
	<homepage>http://www.empreinte-urbaine.eu</homepage>
67
	<default_language>fr</default_language>
68 4 Simon
        <image>plugin.png</image>
69 1 Simon
	<apps>
70
		<app>public</app>
71
		<app>admin</app>
72
	</apps>
73
</plugin>
74
</code>
75
</pre>
76
77
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.
78
79
80
h2. Exemple de l'architecture d'un plugin 
81
82 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.
83 1 Simon
84 3 Simon
!plugin.png!
85
86
87
Pour accéder au code source du plugin, "suivez le lien":http://dev.linea21.com/projects/linea21/repository/show/trunk/v1/plugins/l21_gotoTop.