Passer un tableau de valeur à un critère de façon optionnelle

Le besoin

Pouvoir filtrer le résultat d’une boucle dans un inclure en fonction de certains critères tout en gardant cette boucle fonctionnelle en l’absence de ces critères.

Le cas concret

Via un même inclure, afficher toutes les algues dans la rubrique algues et seulement celles présentes dans un produit sur la page produit avec un seul et même squelette.

Le principe

Les produits et les algues sont des articles liés entre eux par des mots clefs algues (groupe de mot-clefs 1).
Chaque article algue (rubrique 13) a le mot clef algue lui correspondant et chaque article a le(s) mot-clef(s) algue qu’il contient.

La rubrique algues

Dans la rubrique algues, c’est facile, on veut afficher toutes les algues donc on fait simplement l’inclure :

<INCLURE{fond=inclure/les-algues} />

La page produit

Dans la page produit, c’est (un peu) plus compliqué :

On commence par rentrer dans un tableau les mots-clefs algues liés au produit.

[(#REM) On déclare le tableau ]
#SET{algues,#ARRAY}

[(#REM) On boucle sur les mot-clefs de l'article et on rempli le tableau ]
<BOUCLE_alguesduproduit(MOTS){id_article}{id_groupe=1}> #SET{algues,#GET{algues}|push{#ID_MOT}}</BOUCLE_alguesduproduit>

Note : attention à bien laisser un espace dans la BOUCLE_alguesduproduit, sinon, elle ne renvoi rien et le tableau n’est pas rempli.

Puis, on passe tout ça à l’inclure :

<INCLURE{fond=inclure/les-algues,id_mot=#GET{algues} />

L’inclure

Ensuite, c’est dans l’inclure que ça se joue :

[(#REM) On boucle sur les articles de la rubrique 13 dont l'id_mot a été passé via un tableau à l'environnement
Pour que la boucle fonctionne même si il n'y a pas de tableau, il faut utiliser le critère conditionnel ?IN ]

<B_les_algues>
	<ul>
		<BOUCLE_les_algues(ARTICLES){id_rubrique=13}{id_mot ?IN #ENV{id_mot}}>
			<li><a href="#URL_ARTICLE">#TITRE</a></li>
		</BOUCLE_les_algues>
	</ul>
</B_les_algues>

La doc : https://www.spip.net/fr_article4010.html