Nota SPIP-Contrib : un article qui à fait débat avant publication quand à la solution proposée. La mise en ligne doit permettre de poursuivre ses échanges de manière plus profitable à tous.
Imaginons que pour des raisons de design, vous ayez besoin d’afficher une ligne centrée d’images, dans un ordre précis, au beau milieu d’un article.
Vous ne pouvez pas utiliser le code <imgXXX|center>
, puis qu’alors les images seraient les une au dessus des autres. Et <imgXXX|left>
ou <imgXXX|right>
ne permettent pas de centrer horizontalement la ligne d’images.
Il vous faut donc insérer vos images via un autre balisage, par exemple un div
avec une classe particulière, qui recevra la règle CSS text-align: center;
.
Un modèle
A la place des balises img, nous allons créer un modèle illustrations, qui s’utilise dans le texte avec <illustrations|images=105,96,97>
(où 105,96,97 sont les id_document des images que nous voulons afficher, dans l’ordre dans lequel nous voulons les afficher).
Dans ce modèle, nous allons collecter, via un filtre, dans un tableau PHP global les éléments sur lesquels nous allons boucler, puis nous allons utiliser ce tableau comme paramètre de la boucle TABLEAU.
Code
Le modèle
<div class="illustrations">
[ (#REM)
On utilise le plugin Boucles_sans_tables (http://www.spip-contrib.net/boucler-sur-un-tableau-un-compteur) pour boucler sur les éléments passés dans l'environnement dans leur ordre d'arrivée.
Il est OBLIGATOIRE de passer d'abord les données à boucler dans le filtre putInGlobalsAsArray, qui rempli le tableau $GLOBALS['scregIllustrations'] qui sera ensuite utilisé dans la boucle TABLEAU.
]
[(#ENV{images}|putInGlobalsAsArray)]
<BOUCLE_parseArray (TABLEAU) {var=Illustrations}>
<BOUCLE_illustrations (DOCUMENTS) {id_document = #VALEUR}>
[(#MODELE{img}{embed=oui})]
</BOUCLE_illustrations>
</BOUCLE_parseArray>
</div>
le filtre
function putInGlobalsAsArray($texte) {
$GLOBALS['Illustrations'] = split(',',$texte);
return ('');
}
Fonctionnement
Dans notre modèle, nous recevons les id de nos documents dans #ENV{images}
, séparés par des virgules. Nous passons donc ces données dans le filtre putInGlobalsAsArray
, qui a pour seule fonction de remplir le tableau PHP $GLOBALS['Illustrations']
. Notez que la fonction ne renvoie rien (return ('');
).
Une fois que notre filtre à créé le tableau PHP, il devient accessible pour la boucle TABLEAU
. Il ne reste donc plus qu’à utiliser la boucle normalement : <BOUCLE_parseArray (TABLEAU) {var=Illustrations}>
. Notez qu’ici, le {var=Illustrations}
correspond au $GLOBALS['Illustrations']
. Autrement dit, que si dans notre filtre nous faisons $GLOBALS[’toto’], alors nous bouclons sur (TABLEAU) {var=toto}
.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |