{xxxx IN a,b,c,d}
limite l’affichage aux résultats ayant le critère xxxx égal à a, b, c ou d.
Les résultats sont triés dans l’ordre indiqué (sauf demande explicite d’un autre critère de tri). Il est aussi possible de sélectionner des chaînes de caractères, par exemple avec {titre IN 'Chine', 'Japon'}
Passer en argument un tableau
C’est possible et c’est aussi le seul moyen de passer dynamiquement une liste de valeur avec le critère IN.
Ainsi :
#SET{mes_rubriques, '1,2,3'}
<BOUCLE_a(ARTICLES){id_rubrique IN #GET{mes_rubriques}}>
<h3>#TITRE</h3>
</BOUCLE_a>
…ne fonctionnera pas. Alors que…
#SET{mes_rubriques, #LISTE{1,2,3}}
<BOUCLE_a(ARTICLES){id_rubrique IN #GET{mes_rubriques}}>
<h3>#TITRE</h3>
</BOUCLE_a>
… fonctionnera.
Il peut s’agir d’un tableau défini par les balises
ou bien d’un tableau provenant d’une balise #GET
ou #ENV**{mon_post}
.
Si #ENV{mon_post}
est un tableau (venant par exemple de saisies de formulaire dont l’attribut name se termine par []
), et si les filtres d’analyse ont été désactivés en suffixant cette balise par une double étoile, alors chaque élément du tableau sera considéré comme argument de IN, SPIP appliquant les filtres de sécurité sur chacun d’eux [1].
Le squelette standard fourni dans plugins-dist/forum/formulaires/inc-forum_previsu.html fournit un exemple d’utilisation avec une boucle MOTS ayant le critère {id_mot IN #ENV**{ajouter_mot}}
:
cette boucle sélectionne seulement les mots-clés appartenant à un ensemble indiqué dynamiquement. Ici, cet ensemble aura été construit par le formulaire du squelette standard « choix_mots », qui utilise l’attribut name=ajouter_mot[]
.
Négation de l’opérateur IN en critère de boucle
<BOUCLE_a(ARTICLES) {id_article !IN 11,12,13}>
… n’affichera que les articles dont l’id n’est pas dans la liste IN (voir critère !opérateur valeur).
Utilisation conditionnelle de l’opérateur IN dans un critère de boucle
Exemple
Si #ID_ARTICLE est présent dans l’environnement :
- <BOUCLE_a(ARTICLES) {id_article ?IN 11,12,13}>...
n’affichera que les articles dont l’id est dans la liste IN.
- <BOUCLE_a(ARTICLES) {id_article ?!IN 11,12,13}>...
n’affichera que les articles dont l’id n’est pas dans la liste IN.
Si par contre, #ID_ARTICLE n’est pas présent dans l’environnement, ces critères conditionnels ne s’appliquent pas, et donc ces 2 boucles afficheront tous les articles, quelques soient leur id.
Voir aussi
Critères conditionnels
Opérateurs logiques
Opérateurs