Exemple d’utilisation de la boucle TABLEAU

Cet article est une illustration de l’utilisation du plugin Boucles_sans_tables

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}.

updated on 2 October 2019

Discussion

Aucune discussion

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom