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’utilisateur·trice? 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 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.
    • 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>

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>

Footnotes

[1À partir de la version 3.19 du plugin.

updated on 4 October 2018

Discussion

4 discussions

  • 3

    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.

    <BOUCLE_form(autre_site:FORMULAIRES){identifiant=xxx}>
         <BOUCLE_reps(autre_site:FORMULAIRES_REPONSES){id_formulaire}{par date}>
               #VOIR_REPONSE{input_1}
         </BOUCLE_reps>
    </BOUCLE_form>

    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

    Reply to this message

  • 1

    Voilà ma requete SQL :

    SELECT `nom`, `valeur`, `maj` FROM `spip_formulaires_reponses_champs` AS f
    WHERE `id_formulaires_reponse` IN
    (
    SELECT `id_formulaires_reponse`
    FROM `spip_formulaires_reponses_champs` AS ff
    WHERE `nom`= ’selection_1’ AND `valeur`= ’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

      <BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){nom=selection_1}{valeur=03}>
      <BOUCLE_reponses(FORMULAIRES_REPONSES) {id_formulaires_reponse}>
      #VOIR_REPONSE{xxx}
      </BOUCLE_reponses>
      </BOUCLE_champs>

      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} correspond
      3. 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

    Reply to this 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

    Reply to this message

  • 1

    Selectionner l’affichage des réponses en fonction d’un champ
    Bonsoir,

    Contexte : J’ai créé un formulaire pour l’inscription des adhérents d’une structure fédérative. Je souhaite que les administrateurs autorisés ( rubrique en accès restreint) puisse consulter les adhésions de sa section et seulement celles-ci.

    Bref, il faut parler Spip et pouvoir dire :

    SELECT * FROM ma_table_reponse_au_formulaire_concerné WHERE champ_code_section = ‘valeur_de_la_section_choisie’;
    Et puis l’afficher...
    merci au traducteur spipophone

    • Il faut dans ce cas commencer par boucler sur la table formulaires_reponses_champs avec un critère {valeur=XXX} et {champ=yyy}. Cela permet ensuite de remonter à l’idenfiant de la réponse, puis de boucler sur celle ci.

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom