/
fonctions.gtw
238 lines (147 loc) · 9.19 KB
/
fonctions.gtw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
Divers plugins sont de simple fonctions qui affichent quelque chose selon les paramètres.
====== zone ======
Permet l'affichage d'une zone.
<code html>
<div>
{zone 'module~une_zone'}
</div>
</code>
C'est en fait l'équivalent de
<code php>
$tpl->assignZone('ZONE','module~une_zone');
</code>
<code html>
<div>
{$ZONE}
</div>
</code>
====== jlocale ======
Permet l'affichage d'une chaine localisée
<code>
{jlocale 'module~ma.locale.key'}
</code>
====== jurl ======
Permet l'affichage d'une url correspondant à une action de jelix
<code>
{jurl 'module~controlleur:action', array('id'=>$id)}
</code>
==== Paramètres ====
== Module~Action ==
Sélecteur de l'action qui doit être appelé par les liens de pages.
== Paramètres de l'action ==
Tableau contenant les paramètres métiers à placer dans l'url.
==Echappement==
Un troisième paramètre permet de dire l'on veut que certains caractères soient échappés ou pas, il vaut true par défaut.
====== html : pagelinks ======
Lorsque que l'on doit afficher une liste de résultats à l'écran et que cette liste est longue, il peut être judicieux de la répartir sur plusieurs pages. Le plugin Pagelinks facilite l'affichage d'un tel système de pagination, avec des liens pointant vers les différentes pages de résultats.
Pour utiliser le plugin avec les comportements par défaut, il suffit d'utiliser la syntaxe suivante.
<code>
{pagelinks module~action, paramètres de l'action, nombre total de résultats, index résultat courant, nombre de résultats par page, nom du paramètre d'offset, propriétés d'affichage}
</code>
Exemple :
<code html>
<p>{pagelinks 'myModule~default_index', array(), 283, 60, 15, "offset"}</p>
</code>
==== Paramètres ====
== Module~Action ==
Sélecteur de l'action qui doit être appelé par les liens de pages.
== Paramètres de l'action ==
Tableau contenant les paramètres métiers à placer dans l'url des liens de pages.
array("param1" => 1, "param2" => "deux")
Si il n'y aucun paramètre à passer, on utilise un tableau vide :
array()
== Nombre total de résultats ==
Nombre entier représentant le nombre total des résultats répondant à votre requête. Vous devez donc l'avoir calculé au préalable.
== Index résultat courant ==
Nombre entier représentant l'offset, c'est à dire l'index du résultat courant. En clair : le numéro d'ordre du premier enregistrement afficher sur la page. Pour la première page, vous metterez 0. Pour les pages suivantes, il est calculé automatiquement et est passé dans le paramètre dont vous indiquez le nom dans "nom du paramètre d'offset"
== Nombre de résultats par page ==
Nombre entier représentant le nombre de résultats contenus dans une page de résultats.
**Important** : le plugin ne s'affichera pas si il n'y a pas au moins 2 pages de résultats disponibles.
== Nom du paramètre d'offset ==
Chaîne de caractère contenant le nom que doit prendre le paramètre correspondant à l'offset dans l'url des liens de pages.
== Propriétés d'affichage ==
Tableau contenant les paramètres liés à l'affichage du plugin. Ce paramètre est optionnel. S'il est omis, le plugin utilise le comportement par défaut, à savoir qu'il affiche l'intégralité des liens avec leur intitulé par défaut.
Il est donc possible de personnaliser l'affichage, en définissant le nombre de liens à afficher ainsi que les intitulés des liens spéciaux (page suivante, page précédente, etc.). Pour cela on ajoute simplement un tableau de paramètres supplémentaires comme ci-dessous dans l'appel.
<p>{pagelinks 'myModule~default_index', array(), 283, 60, 15, "offset", array('start-label' => 'début', 'end-label' => 'fin', 'prev-label' => 'précédent', 'next-label' => 'suivant', 'area-size' => 5)}</p>
Il est ainsi possible de renseigner une ou plusieurs des valeurs d'index suivantes qui viendront écraser le comportement défini par défaut.
* **start-label** : Libellé du lien de la première page de résultats disponible. Si la valeur est une chaine vide, le lien ne sera pas affiché.
* **prev-label** : Libellé du lien de la page de résultats précédente. Si la valeur est une chaine vide, le lien ne sera pas affiché.
* **next-label** : Libellé du lien de la page de résultats suivante. Si la valeur est une chaine vide, le lien ne sera pas affiché.
* **end-label** : Libellé du lien de la dernière page de résultats disponible. Si la valeur est une chaine vide, le lien ne sera pas affiché.
* **area-size** : Nombre de liens à afficher avant et après la page courante. Si la valeur est 0, tous les liens seront affiché.
L'exemple suivant renomme les liens "précédent" et "suivant", et masque les liens de début et de fin. De plus un maximum de 5 pages sera affiché de part et d'autre de la page courante.
<code html>
<p>{pagelinks 'myModule~default_index', array(), 283, 60, 15, "offset", array('start-label' => '', 'end-label' => '', 'prev-label' => 'précédent', 'next-label' => 'suivant', 'area-size' => 5)}</p>
</code>
L'exemple suivant renomme les liens "précédent" et "suivant", et utilise le libellé par défaut pour les liens de début et de fin. De plus l'intégralité des liens sera affichée.
<code html>
<p>{pagelinks 'myModule~default_index', array(), 283, 60, 15, "offset", array('prev-label' => 'précédent', 'next-label' => 'suivant')}</p>
</code>
Bien entendu, il est aussi possible de possible d'utiliser un tableau de paramètres déclaré dans le controleur.
<code php>
$properties = array('start-label' => '',
'prev-label' => 'précédent',
'next-label' => 'suivant',
'end-label' => '',
'area-size' => 5);
$rep->body->assign('properties',$properties);
</code>
L'appel du template aura donc la forme suivante.
<code html>
<p>{pagelinks 'myModule~default_index', array(), 283, 80, 15, "offset", $properties}</p>
</code>
==== Localisation des intitulés ====
Il est possible de localiser les intitulés des liens spéciaux en utilisant jLocale de la façon suivante.
<code php>
$properties = array('start-label' => jLocale::get("bar~foo.pagelinks.start"),
'prev-label' => jLocale::get("bar~foo.pagelinks.prev"),
'next-label' => jLocale::get("bar~foo.pagelinks.next"),
'end-label' => jLocale::get("bar~foo.pagelinks.end"),
'area-size' => 0);
</code>
==== Mise en forme avec CSS ====
Le plugin Pagelinks met à disposition les classes CSS suivantes pour permettre de styler les liens de pagination comme désiré.
* **ul.pagelinks** : sélecteur css de la liste des pages disponibles
* **li.pagelinks-start** : sélecteur css du lien vers la première page de résultats
* **li.pagelinks-prev** : sélecteur css du lien vers la page de résultats précédente
* **li.pagelinks-current** : sélecteur css de la page de résultats courante
* **li.pagelinks-disabled** : sélecteur css des pages de résultats désactivées
* **li.pagelinks-next** : sélecteur css du lien vers la page de résultats suivante
* **li.pagelinks-end** : sélecteur css du lien vers la dernière page de résultats
Exemple de feuille de style minimaliste pour une utilisation de ''Pagelinks'' avec les propriétés d'affichage par défaut.
<code css>
ul.pagelinks>li {
display: inline;
}
ul.pagelinks>li:before {
content: ' | ';
}
ul.pagelinks>li.pagelinks-start:before {
content: '';
}
</code>
====== html : urljsstring ======
Le plugin de template urljsstring permet de générer une chaîne pour du javascript, qui contient une url généré par le moteur d'url de Jelix, et qui contient aussi des paramètres dynamiques en javascript. Par exemple, imaginons que l'on veuille ça en javascript :
"/index.php?module=foo&action=bar&t=1547¶m1=" + uneValeur + "¶m2=" + (val*5)
On pourrait bien évidement écrire cela directement dans le script javascript. Mais si la forme d'url change ? On est alors obligé de modifier le template.
urljsstring permet d'éviter cela.
Ce plugin accepte trois paramètres :
- le sélecteur d'action (ex: "foo~default:bar")
- un tableau contenant les paramètres de l'url qui ont une valeur déjà calculée. Clés = noms des paramètres. Valeurs = valeurs des paramètres
- un tableau contenant les paramètres qui seront créés dynamiquement par le script javascript. Clés = noms des paramètres. Valeurs = expressions javascript.
Pour générer une url comme l'exemple ci-dessus, on affichera :
<code html>
{urljsstring "foo~default:bar" , array('t'=>1547) , array('param1'=>'uneValeur', 'param2'=>'(val*5)')}
</code>
Astuce : pour plus de lisibilité, vous pouvez bien sûr utiliser des variables de template
<code>
{assign $paramjs=array('param1'=>'uneValeur', 'param2'=>'(val*5)')}
{urljsstring $selecteur , $paramstatic , $paramjs}
</code>
__Note__ : urljsstring génère les doubles quotes de la chaîne. Donc inutile de les rajouter dans votre script.
<code javascript>
// ceci est incorrect
var foo = "{urljsstring $selecteur , $paramstatic , $paramjs}"
// ceci est correct
var foo = {urljsstring $selecteur , $paramstatic , $paramjs}
</code>