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

Discussion

No discussion

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

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.

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