Condition Regex

Bonjour,

Je tente de faire afficher une div seulement lorsque le nombre de résultats d’une boucle = certain nombre (c’est pour un alignement correct en flex) :

#SET{numlist, ‹ (^(2|5|8|11|14|17|20|23|26|29|32|35|38)$) ›}

<BOUCLE_test_justify1(CONDITION){si #GET{total_actus_boucle}==#GET{numlist} }>
<div class="actus-vignette-last"></div>
</BOUCLE_test_justify1>

La variable #GET{total_actus_boucle} affiche bien un nombre, mais ma div supplémentaire est toujours affichée, quel que soit la valeur de cette variable (donc la condition est toujours vraie).

Pourtant l’expression régulière numlist fonctionne correctement.

Ce code fonctionne bien lorsque je crée une condition pour chaque nombre à tester, mais cela n’est pas très élégant, surtout que je dois répéter cette condition plusieurs fois…

Vous avez une idée de la bonne syntaxe pour tester l’appartenance à des résultats d’une regex ?

Bonjour Roger !
Je crois que là tu mélanges un peu la syntaxe des critères et celle d’un appel de filtres.

La condition {si xxx} est évaluée en amont de la boucle et donc c’est une expression SPIP normale qu’il lui faut en argument, c’est à dire avec un appel de filtre éventuellement, comme on le voit dans les exemples de la doc https://www.spip.net/fr_article6406.html
Pour utiliser une regexp en filtre, il faut utiliser le filtre match, cf https://www.spip.net/fr_article4299.html, et le critère deviendrait donc {si #GET{truc}|match{#GET{regexp}}.

Mais il n’y a en fait pas besoin de boucle puisqu’il suffit de :
[(#GET{truc}|match{#GET{regexp}}|oui) <div class="actus-vignette-last"></div> ]

Et il n’y a pas besoin de regexp non plus : tu peux tester le modulo de la division entière par 3, ce qui est beaucoup plus léger qu’une évaluation de regexp:
[(#GET{truc}|modulo{3}|=={2}|oui) <div...</div>]
(cf https://www.spip.net/fr_article4301.html )

Et il y a peut être plus simple pour écrire cela, avec le filtre |alterner.
Si tu es dans une boucle englobante, qui crée une série de divs ou autres tags html, alors tu peux utiliser dans cette boucle englobante le filtre |alterner sur le compteur_boucle :
[(#COMPTEUR_BOUCLE|alterner{"" ,"", <div class="actus-vignette-last"></div> })]
À ajuster selon tes besoins, et il peut aussi s’appliquer sur ta variable : [(#GET{total_actus_boucle}|alterner{"" ,"", <div class="actus-vignette-last"></div> })]
Vois les exemples de https://www.spip.net/fr_article4145.html

Parfois spip fait bien les choses :slight_smile:

Bonjour JLuc !
Et merci pour cette réponse qui va bien au delà de mes attentes :wink:

La solution avec |modulo fonctionne parfaitement !

Effectivement je tâtonne encore pour implémenter quelques fonctionnalités :wink:
Spip fait effectivement bien les choses.

Bonne journée !