[Résolu] Passer une liste d'id à un modèle

Salut,

j’ai modèle <contact> auquel je veux passer une série d’id pour afficher une liste d’auteurs.

<BOUCLE_contact(AUTEURS) {id_auteur IN #ENV{id}} {tous}>
#NOM
</BOUCLE_contact>

Quand je l’appelle avec <contact|id=1,2,3>, ça ne prend en compte que le 1er id.

J’ai essayé plusieurs pistes dont #LISTE mais je trouve pas comment faire (Alors que ça fonctionne avec {id_auteur IN #LISTE{1,2,3}}>).

C’est un truc avec lequel je galère toujours, si vous avez la solution…

Pour info, on a une fonction pour ça dans GIS cf gis_fonctions.php · master · spip-contrib-extensions / gis · GitLab

La solution est d’utiliser explode(), donc un truc comme #ENV{id}|explode{,} dans ton modèle.

Bien vu, c’est ça (avec juste des ' autour de la virgule) :

<BOUCLE_contact(AUTEURS) {id_auteur IN #ENV{id}|explode{','}} {tous}>
#NOM
</BOUCLE_contact>

merci :slight_smile:

1 « J'aime »

Bon, j’ai un autre problème lié :slight_smile:

J’essaie d’inclure le modèle depuis un squelette en lui passant les id, mais ça ne fonctionne pas.

Ce sont des rubriques, mais le principe est le même :

<BOUCLE_rub(RUBRIQUES) {id_rubrique IN #ENV{rubriques}|explode{','}}>

et je l’inclus comme ça :

<INCLURE{fond=modeles/mon_modele, rubriques=6,4,7} />

Mais ça ne prend en compte que le 1er id.

J’ai essayé rubriques='6,4,7' et rubriques=#LISTE{6,4,7} mais ça provoque des erreurs.

Alors que quand je l’insère en tant que modèle dans un article, ça fonctionne:

<mon_modele|rubriques=4,7>

Je ne comprends pas d’où vient la différence de comportement et, évidemment, l’idée et de pouvoir l’insérer dans un squelette et en tant que modèle.

la virgule est un séparateur d’argument donc quand tu écris 4,7 dans un contexte qui attend une liste d’argument… ben ça fait plein d’arguments différent au lieu d’un seul argument 4,7

donc

  • dans certains contextes (argument de filtre) tu peux mettre la liste entre guillemets ou quotes (comme quand tu appelles explode)
  • dans tous les contextes, tu peux utiliser autre chose qu’une virgule par exemple + ce qui donne 4+7+18 et au lieu de explode{', ' } tu explode{+}

Je me suis douté que ça venait de là mais je comprends pas pourquoi rubriques='6,4,7' ne résout pas la problème.

Bref, j’ai donc utilisé <INCLURE{fond=modeles/mon_modele, rubriques=6:4:7} /> et je remplace les : par des , en début de modèle avec [(#SET{rubriques, #ENV{rubriques}|replace{':',','}})] pour conserver le même séparateur dans le contenu des articles.

Et donc la boucle devient <BOUCLE_modele(RUBRIQUES) {id_rubrique IN #GET{rubriques}|explode{','}}> avec un #GET au lieu du #ENV

merci pour ton retour.

En fait je pense que @JLuc voulais dire qu’il faut faire comme ça :

<INCLURE{fond=modeles/mon_modele, rubriques=#VAL{'6,4,7'}} />
2 « J'aime »

Ah mais oui, #VAL, bien sûr !
Ça fonctionne parfaitement, merci :slight_smile: