Boucler sur les réponses de Formidable

Le plugin Formidable permet d’enregistrer les réponses. Mais comment récupérer ces réponses ? Par des boucles SPIP, qui possèdent quelques spécificités.

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’utilisateurtrice ? En raison de la structure des tables de formidable, il faut utiliser une balise spéciale : #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 humaines. 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.
    • 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>

Notes

[1À partir de la version 3.19 du plugin.

Discussion

3 discussions

  • 2

    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 participantes 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

  • 7

    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 pipeline formulaire_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

  • 4

    Bonjour
    Je cherche à afficher les réponses d’un formulaire.
    J’appelle ces réponses avec le code suivant :

    <BOUCLE_reponses (FORMULAIRES_REPONSES){id_formulaire}{tri_selon_reponse selection_1}>
    <p class="#VOIR_REPONSE{selection_1,edit}">#VOIR_REPONSE{selection_1,valeur_uniquement}
    #VOIR_REPONSE{checkbox_1,valeur_uniquement}
    </p>
    </BOUCLE_reponses>

    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 quelle 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

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom