La boucle (FORMULAIRES_REPONSES)
La boucle (FORMULAIRES_REPONSES)
permet de boucler sur les réponses d’un formulaire. Chaque réponse se voit associer une certain nombre de champs :
-
id_formulaires_reponse
; -
id_formulaire
; -
date
; -
ip
; -
id_auteur
; -
maj
; -
cookie
; -
statut
.
Comme tous les champs d’une table, il est possible de s’en servir :
- comme critère, par ex. :
{id_formulaire=1}
, pour récupérer les réponses du formulaire n°1 ;-
{id_formulaire}
, pour récupérer les réponses du formulaire passé en argument ; -
{!par date}
pour récupérer d’abord les réponses les plus récentes ;
- En balise avec des majuscules et un dièse initiale
#DATE
.
Par défaut, seules les réponses publiées sont retournéess (comme pour les autres objets de SPIP).
Trouver les valeurs enregistrées en base
Comment trouver les valeurs postées par l’utilisateur#VOIR_REPONSE{<champ>,<option>}
- L’argument
<champ>
est obligatoire. Il contient le nom technique du champ sans le @. Par ex :#VOIR_REPONSE{input_1}
- L’argument
<option>
est facultatif. Il peut prendre l’une des valeurs suivantes [1] :- S’il est absent, on aura une vue standard de la réponse, avec le label et la valeur (comme cela apparaît lorsqu’on voit les réponses dans l’espace privé).
- S’il est égal à
valeur_uniquement
on aura la valeur, formatée de manière lisible par les humain e s. Par exemple les boutons radios et les cases à cocher ont deux valeurs :- une valeur technique (avant le
|
dans le réglage de la saisie) ; - une valeur humaine (après le
|
dans le réglage de la saisie)
C’est la seconde valeur qui est affichée.
- une valeur technique (avant le
- S’il est égal à
brut
, on aura la valeur brute (donc la valeur « technique » pour les boutons radios / cases à cocher). - S’il est égal à
label
, cela donne le label associé au champ - S’il est égal à
edit
on aura la classe css nécessaire au bon fonctionnement des du plugins crayons.
Exemple concret : je veux récupérer les champs input_1
de toutes les réponses au formulaire n°1, et je veux que les admins puissent éditer la réponse avec les crayons.
<BOUCLE_reponses (FORMULAIRES_REPONSES){0,1}{id_formulaire=11}>
<p class="#VOIR_REPONSE{input_1,edit}">#VOIR_REPONSE{input_1,brut}</p>
</BOUCLE_reponses>
Par défaut, les valeurs sont mises en forme grâce à des balises HTML. Il est possible de faire sauter ces balises via le filtre |formidable_nettoyer_saisie_vue
.
Trier selon un champ
La boucle (FORMULAIRES_REPONSES)
peut recevoir un critère {tri_selon_reponse <champ>}
, où <champ>
doit être remplacé par le champ de formulaire selon lequel on trie.
Sélectionner les réponses selon l’identifiant textuel du formulaire
Les formulaires Formidable possèdent des identifiants textuels. Il est possible de sélectionner les réponses d’un formulaire en fonction de cette identifiant, mais pour cela il faut faire une jointure.
Si je veux obtenir les réponses correspondant au formulaire dont l’identifiant est inscription
.
<BOUCLE_reponses (FORMULAIRES_REPONSES formulaires){0,1}{identifiant=inscription}>
<p class="#VOIR_REPONSE{input_1,edit}">#VOIR_REPONSE{input_1,brut}</p>
</BOUCLE_reponses>
Discussions par date d’activité
11 discussions
Tri des réponses
Bonjour,
je cherche à faire dans une boucle FORMULAIRES_REPONSES un tri « en cascade », similaire au tri qui peut être fait dans une boucle standard :
{par critère1, critère2}
par exemple{par date, titre}
qui trie par date puis, à date égale, par titre.J’ai essayé
{tri_selon_reponse hidden_1, input_3}
et{tri_selon_reponse hidden_1, tri_selon_reponse input_3}
mais sans succès...Possible ? Pas possible ?
Répondre à ce message
Coucou,
Encore merci pour le travail et la doc, toujours plus loin dans la formidable gestion des formulaires !
Je me demande s’il est possible d’envoyer une boucle dans le résultat d’un formulaire ?
Par exemple, je souhaite faire apparaître les noms des participants (précédentes réponses au formulaire) d’un évènement à la suite des date à cocher lors d’une réservation (dans le formulaire, lister les noms des participant·es derrière les résultats de @evenements_1@ si vous voyez ce que je veux dire ?)
Ce serait surpuissant !
Là comme cela à chaud
1. Ton cas d’usage me parait assez limite niveau RGPD
2. Ergonomiquement/graphiquement tu risque d’avoir une liste assez longue
3. Techniquemet tout depend de ce que tu veux avoir ergonomiquement : ca pourrait être :
- une saisie chargée dynamiquement en ajax lorsqu’on selectionne l’evenement (il n’y a pas d’outil clé en main pour le faire, mais ce n’est pas très compliqué, et on pourrait imaginer d’ajouter une fonctionnalité comme cela dans saisies)
- soit pour le cas de la saisie evenement, il est possible de surcharger l’affichage de l’evenement lui même (saisies/inc-evenement.html), auquel cas tu pourrais aller cherche les autres inscrits.
1. C’est vrai, le formulaire est dédié aux bénévoles d’une asso (en remplacement d’un tableau en ligne pour s’inscrire sur des créneaux).
2. Il y aura un petit nombre de participants par évènements. Mon but est de permettre à une personne de réserver un évènement, et de choisir une tranche horaire pour chaque évènement proposé (je veux éviter de créer un évènement par tranche horaire pour ne pas surcharger la liste). J’aimerais que la liste des évènements affichent les participant(e)s et leur tranche horaire choisie. Idéalement, s’il les noms pouvaient apparaître après avoir cliqué sur un évènement, au moment de choisir sa propre tranche horaire.
3. Je pense que ta deuxième solution est celle que je peux tenter, merci de m’avoir indiquer le bon fichier ! Voyons ce que j’arrive à faire. Merci Maïeul. :)
Répondre à ce message
Bonjour,
Je cherche à griser, rendre inactives, des cases à cocher d’un formulaire formidable en fonction des réponses des utilisateurs... Est-ce possible ? Quelle est la démarche ? Merci.
Pas nativement non. Ce serait compliqué d’ailleurs à faire une interface simple pour cela.
En revanche tu peux sans doute t’en sortir avec l’option
desactiver certains choix
. Soit en modifiant manuellement au fur et à mesure que tu désactive, soit en te branchant sur le pipelineformulaire_saisies
pour modifier dynamiquement le tableau de saisie.Wow, c’est du costaud.... Ok, je cherche une solution... Je suis bidouilleur, pas développeur... Mais vraiment, ce serait chouette d’avoir un vrai doodle sur Spip :-)
Definit plus clairement ton besoin. Vote ? Sondage ? Reservation d’événements ?
Mon besoin est simple... mais apparemment difficile à coder... J’ai besoin que dans mon formulaire apparaisse les intervalles pour chaque heure entre une date/heure de début et date/heure de fin et que lorsqu’un utilisateur a coché une heure, que cette heure ne soit plus accessible pour un autre utilisateur sauf si le premier utilisateur change d’avis. J’arrive à créer manuellement avec Formidable le formulaire (c’est-à-dire que je défini moi-même les trois jours entre vendredi 19h et dimanche 19h. Je crée donc les cases à cocher pour chacune de ces heures....mais voilà, ça se limite à ça, je n’ai pas la gestion des autres utilisateurs et ce serait bien aussi que les cases à cocher se créent automatiquement entre la balise de date de début et date de fin... Bref... C’est un doodle... Voici la page où j’ai placé le formulaire : https://www.epec.be/24-7-Charleroi.html
1. Alors ce n’est pas un doodle, puisque normalement sur un doodle plusieurs personnes peuvent choisir un même créneau, là au contraire tu veux que les personnes ne choisissent qu’un créneau
2. Il n’est pas en soit compliqué à coder, mais encore faut-il savoir coder ! Ce qui serait compliqué, disais-je, c’est d’avoir une interface ergonomique dans formidable pour faire cela (et d’ailleurs est-ce que ce serait pertinent de faire cela dans formidable, j’en doute, sans doute un plugin spécifique serait plus pertinent)
3. Quoi qu’il en soit, tu est plus sur de la réservation d’evenement avec un notre limité de place. Et pour ca bah tu as « formidable participation » qui permet de gérer des inscriptions à des evenements.
Merci Maïeul,
Oui, j’ai bien pensé aussi à « participation » mais là, j’ai le soucis de créer actuellement environ 48 événements pour 48 heures, actuellement car les réservations (1 personne max par heures) se font pour le moment entre le vendredi 19heures et le dimanche 19heures... et deux fois par mois. Mais cela peut évoluer... Je pense qu’il serait bien en effet de partir sur un plugin spécifique... Mais il faut savoir coder... Peut-être qu’avec l’émergence de l’IA, cela finira par arriver 😂.
Je pensais à un système doodle justement pour que cela ne serve pas qu’à mon cas de figure mais aussi à d’autres qui j’imagine, seraient également intéressés par une solution gratuite, intégrée à Spip et libre de « pistage »... C’est d’ailleurs dommage que des plugins intéressants disparaissent au profit des GAFA’s... Je pense notamment à analyclick qui permettait simplement de connaître le nombre de téléchargement d’un document sans se soucier de qui télécharge le document. Cela laisse la place grande ouverte à d’autres pompeurs de données. 😭😔
Voilà pour le billet d’humeur... Encore merci d’avoir pris le temps de me lire et d’entrevoir d’autres pistes.
Répondre à ce message
Bonjour
Je cherche à afficher les réponses d’un formulaire.
J’appelle ces réponses avec le code suivant :
L’affichage obtenu correspond à ce que j’attends : le tri s’effectue bien, les réponses s’affichent.
Mais...
Cet affichage ne se fait qu’immédiatement après avoir rempli le formulaire. Si je reviens le lendemain, l’affichage des réponses est vide : ni ma réponse de la veille, ni d’autres.
Je souhaiterais qu’à chaque visite, n’importe quel·le internaute puisse voir les réponses sans avoir besoin de renseigner le formulaire.
Je dois mal m’y prendre...
C’est très très étonnant. Il n’y a pas de raison que cela ne marche pas. Tu es sur de pas avoir des soucis de cache ? les réponses sont bien publiées ? tu n’a pas de tests conditionnels qui trainent ailleurs ?
Pour le cache, je ne pense pas qu’il y ait de pb.
Les réponses sont bien enregistrées.
Il n’y aucun affichage conditionnel dans le formulaire.
Ce dernier ne contient que deux champs :
selection_1 et checkbox_1.
Pour les traitements, ce formulaire est réglé en « Modifiable » avec méthode d’identification par l’id_auteur...
Le fait qu’il soit modifiable concerne l’affichage du formulaire, pas des réponses. Il faudrait utiliser un ?var_mode=debug.
Résolu...
Après avoir examiné le mode debug, après avoir de nouveau fouillé les différents articles parlant de l’affichage des résultats, je me suis aperçu que c’était mon appel au modèle d’affichage des résultats qui n’était pas bon :
Dans l’article, j’avais mis : <reponse_form9>, puis essayé <reponse_form|id=9>.
Ces deux appels affichaient bien les réponses mais seulement juste après avoir validé le formulaire.
Finalement, c’est : <reponse_form|id_formulaire=9> qui fonctionne parfaitement...
Merci.
Répondre à ce message
Bonjour,
Je souhaite traiter/afficher mes données issue d’un formulaire.
J’affiche bien les réponses mais je souhaite que ce soit conditionné aux réponses :
- tri selon date_1
- conditions sur date_1
hors là je nage depuis 2 jours. Impossible de trier ces maudits données selon un champ.
En fouillant dans le code je vois dans formidable_critere.php :
Dans le temps on utilisait le critère ?
Aujourd’hui comment fait-on ?
Mon code :
J’ai essayé via une boucle DATA entre autres...
Mais maintenant je cale.
Merci d’avance !
PS :
Cette question dans discuter.spip.net est simplement boudée
Le tri des réponses de formidable m’a l’air un sujet tabou
Tout le monde n’a pas forcément le temps de tout lire.
Mais pour autant que je puisse comprendre le code il faut utiliser désormais
{tri_selon_reponse champ}
Merci
Je n’arrive pas à l’utiliser.
Je fais :
avec champ=date_1 passé à l’appel ou
mais ça n’affiche plus rien.
Quel est le format de champ ?
Bonne soirée.
En fait là j’ai les résultats affichés, mais non triés
Ah mais le critère doit s’appliquer à la boucle
(FORMULAIRES_REPONSES)
, pas(FORMULAIRES_REPONSES_CHAMPS)
(dont par ailleurs tu n’a pas besoin si tu utilise#VOIR_REPONSE
). Puisque c’est bien les réponses que tu veux triés, pas les champs...Ok j’y suis
Je retrouve mon affichage avec, par ex., des appels
Mais toujours non triés...
Du coup mon tri fonctionne sur un champ ’text’, input_1 par ex. mais pas correctement sur mon champ date_1 :
ni en modifiant la fonction tri_selon_reponse :
Arg ça ne trie pas par date...
no sé. Mais oui tout doit se jouer dans la manière dont sont stockés les dates...
Mmh, merci déjà pour tout !
Je lance ici du coup :
discuter.spip.net
A++.
Merci encore ! Maïeul et l’équipe ont réagi et corrigé un bug du critère
{tri_selon_reponse}
: https://git.spip.net/spip-contrib-e...j’ai donc surcharger public/formidable_criteres.php avec le critère corrigé.
Puis ce que j’ai fait et qui fonctionne à merveille maintenant :
pour info la définition de ma balise dans mes_fonctions.php :
Cordialement.
Maïeul c’est moi, donc oui je sais que j’ai réagi :P
La correction a été intégrée dans la version officielle. J’ai donc documenté ici.
Répondre à ce message
Bonjour,
je n’arrive pas à récupérer une réponse de textarea au format html formaté à partir des raccourcis spip tel qu’écrit dans le formulaire de saisie, je perds les puces, les liens, etc.
si j’écris :
je vois le html avec les tags dans la réponse
si j’écris :
je perds évidement les tags html et donc le formatage ...
Voici la partie complète pour l’affichage de cette réponse :
J’ai essayé diverses options de #VOIR_REPONSE avec différents filtres comme safehtml, sans succès.
merci d’avance
Thierry
Bonjour,
il faut utiliser le filtre
|propre
.Bonjour,
Pas mieux, en fait le texte est bien formaté par spip (typo -> html), donc il doit passer dans le filtre propre (qui est actif par défaut, d’après ce j’ai pu en lire).
Du coup après une petite recherche sur le web, il s’avère qu’un objet textarea n’accepte QUE du texte, il n’est pas fait pour interpréter du html !
Solution, remplacer le textarea par une div, avec le bon css pour reproduire la forme et le fonctionnement de la textarea.
Ah oui je n’avais pas capté ton besoin, j’avais pas compris que tu voulais mettre la version avec html dans un textarea. Je pensais que le textarea était ta source.
Cela étant, heureusement que oui on peut dire d’afficher du code html dans un textarea :) Mais il faut au préalable le parser. SPIP et saisies ont des fonctions natives pour cela. J’avoue ne plus trop me souvenir, car cela fait longtemps que je ne code plus de formulaire en direct.
Le mieux serait simplement que tu utilise la balise #SAISIE avec une saisie de textarea, et cela te ferait tout pour toi.
Mais tout dépend en fait de l’usage final que tu veux avoir. Si c’est pour permettre un copier-coller, alors il vaudrait mieux utiliser un div semantique, en s’inspirant de ce qui est généré par le raccourci code de spip (il y a sans doute une fonction/filtre quelque part dans spip qui fait tout cela bien, mais je n’ai pas le courage de fouiller)
En fait je n’ai pas réfléchi, comme c’est le résultat d’un textarea, je l’ai mis bêtement dans un textearea. Mais finalement j’ai juste besoin d’afficher simplement le résultat et une div convient très bien pour ça !
Merci pour l’aide.
Répondre à ce message
Bonjour,
J’ai un tableau qui affiche les réponses d’un formulaire formidable. J’aimerai ajouter un champ pour y faire des recherches et ainsi filtrer le tableau.
Est-ce qu’il y aurait une méthode déjà toute faite ? Merci
Résolu. J’ai fait
<BOUCLE_reponses_valeurs (FORMULAIRES_REPONSES) {id_formulaire=#ENV{id}} {recherche_reponse #ENV{recherche, ''}} {fusion id_formulaires_reponse}>
Votre réponse m’intrigue : j’y vois un critère que je ne connaissais pas : recherche_reponse. Est-il documenté quelque part ? Quel est son fonctionnement ?
Bonjour Manu,
Pas que je sache. En fait c’est ici https://git.spip.net/spip-contrib-extensions/formidable/src/branch/master/public/formidable_criteres.php#L48
Répondre à ce message
Bonjour
Je me trouve confrontée à un problème avec la balise #VOIR_REPONSE quand je l’utilise dans une boucle qui interroge un formulaire qui n’est pas situé dans le site principal.
Ce code me renvoie les réponses du formulaire xxx de mon site principal, et pas de celui de mon autre site.
Je peux me débrouiller autrement, mais je tenais à signaler ce problème
Florence
merci du signalement. Je verrais si je peux facilement debuguer cela (après la rédaction de trois lettres de candidaturs a des postes divers !)
La version 3.37.2 qui vient d’être envoyé sur la zone corrige ce bug.
Nickel. Ca marche. Merci !
Répondre à ce message
Voilà ma requete SQL :
SELECT
nom
,valeur
,maj
FROMspip_formulaires_reponses_champs
AS fWHERE
id_formulaires_reponse
IN(
SELECT
id_formulaires_reponse
FROM
spip_formulaires_reponses_champs
AS ffWHERE
nom
= ’selection_1’ ANDvaleur
= ’03’)
On dit ça comment en spip ?
Bon, niveau SQL j’aurais fait une jointure plutôt tqu’une requete imbriqué.
Mais peu importe, en SPIP on ferais
Donc
1. On boucle en demandant toutes les entrées qui répondent au critère nom=selection_+ et valeur=03
2. A l’intérieur de cette boucle, on boucle sur toutes les réponses dont l’
id_formulaires_reponse}
correspond3. Et là, on utilise
#VOIR_REPONSE
(mais c’est propre à Formidable, qui est dérogatoire par rapport à SPIP)ps : merci à l’avenir de répondre en dessous du message, et de ne pas rouvrir un fil de discussion à chaque fois
Répondre à ce message
Bonjour, j’essaye de bien assimiler vos informations.
Je suis allé faire un tour dans la BDD, j’ai vu que les réponses se trouvaient bien dans la table formulaires_reponses_champs
Cette table a les champs suivants :
maj
id_formulaires_reponses_champ
id_formulaires_reponse
nom
valeur
- nom : contient le nom système des champs du formulaire,
Par exemple, celui qui m’intéresse se nomme « seccion_1 »
- valeur : contient la valeur fournie par celui qui a rempli le formulaire [en l’occurrence, il s’agit d’une liste de sélection avec des valeurs prédéfinies].
Dans mon cas, je peux par exemple choisir la valeur : « 03 » qui correspond au département de l’Allier.
[Ultérieurement, j’ai intérêt à jouer sur la valeur de la rubrique comme variable d’environnement. Un seul squelette secteur, et un numéro de rubrique correspondant au département.]
Or vous m’indiquez les critères :
valeur=XXX Cela signifie-t-il bien, la valeur de l’enregistrement qui m’intéresse. Ex. valeur=03
champ=yyy > nom=seccion_1 où « champ » est le nom du champ de la table, et « yyy » la valeur que je veux sélectionner ?
Exemple pour mon test :
J’ai plus de mal pour la suite.
« remonter à l’idenfiant de la réponse »
« puis de boucler sur celle ci. »
C’est peut être ce concept spipien d’environnement qui joue dans l’inclusion des boucles et évite des variables ??
Mais, alors…
Je récupère quel id ? et pour passer par la Boucle formulaire_reponse [ce qui suppose une jointure] ? ou rester dans une boucle formulaire_reponses_champs ?
c’est à dire :
SELECT id_formulaires_reponses_champ / id_formulaire_reponse ??
FROM formulaires_reponses_champs
WHERE nom LIKE ’03’
J’ai bien relu les bases de la doc, mais pas encore assimilé le Spipien.
J’ai espoir que mes tribulations puissent servir à d’autres..
Merci
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |