[Résolu] Formidable : id du formulaire

Bonjour tout le monde !
J’ai un squelette atelier.html qui appelle un formulaire formidable comme ceci :

#SET{idform, #ENV{form}}
[...]
<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#GET{idform}}>
<h2>#TITRE</h2>
#FORMULAIRE_FORMIDABLE{#GET{idform}}
</BOUCLE_formulaire>
<div class="info">
<p>L'identifiant du formulaire n'est pas valide ou l'atelier est plein.</p>
<p>Pour plus d'informations, contactez moi.</p>
</div>
<//B_formulaire>

Aucun problème si j’appelle le squelette de cette manière
https://site.fr/spip.php?page=atelier&form=5
Par contre si je l’appelle comme ceci
https://site.fr/spip.php?page=atelier&form=identifiant_du_formulaire
Le formulaire ne s’affiche pas et j’ai le texte de non-exécution de la boucle qui s’affiche.

Je suppose que c’est évidement la ligne <BOUCLE_formulaire(FORMULAIRES){id_formulaire=#GET{idform}}> qui pose problème.

En gardant la même structure je pourrais convertir l’identifiant textuel du formulaire dans son numéro pour avoir des URL explicites ?

Merci de votre aide.

id_formulaire != id cf Formidable, le générateur de formulaires - SPIP-Contrib :slight_smile:

pour retrouver l’identifiant numerique d’un formulaire a partir de son identifiant textuel, utiliser le filtre formidable_id_formulaire, qu’il faut charger en ajoutant un include_spip('formulaires/formidable'); dans un fichier _fonctions.php

Le plus simple serait de choisir si tu l’appelles avec un identifiant numérique ou son identifiant textuel mais que l’un des 2.

Avec l’identifiant numérique c’est comme tu fais :

Avec l’identifiant textuel, c’est le champ ‹ identifiant › qu’il faut tester, et ça devrait donc être :

#SET{identifiant,#ENV{form}}
<BOUCLE_formulaire(FORMULAIRES){identifiant=#GET{identifiant}}>

Remarque : si tu passes un argument qui a le bon nom (id_formulaire et identifiant) à l’inclusion, il n’est pas nécessaire de passer par l’étape #SET puis #GET (cette étape n’est pas nécessaire) et tu peux écrire directement

<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>

ou

<BOUCLE_formulaire(FORMULAIRES){identifiant}>

Et si VRAIMENT (mais il se pourrait bien que ce soit une faute de conception dans ce cas…) tu dois parfois passer des id_ numériques et parfois des identifiants textuels, alors arrange toi pour les passer à l’inclusion avec le bon nom, et la boucle suivante devrait alors fonctionner :

<BOUCLE_formulaire(FORMULAIRES){id_formulaire?}{identifiant?}>

cf la doc des critères conditionnels : {critère ?} - SPIP

Merci Jluc ça fonctionne parfaitement !