Carnet Wiki

Balises et boucles avec Formidable

Version 11 — Avril 2015 JLuc

Cette page doit devenir une documentation complète (ou complétant celle qui existe sur contrib) à propos de formidable, à sortir du carnet publier sur contrib. Des choses devront probablement sortir d’ici ppour rejoindre l’article initial sans le prolonger trop cependant.

Merci de :
-  noter ici la date et le sens de votre intervention (en résumé, quelques mots max)
-  faire les réflexions et discussions dans le forum privé (on ne comprend rien aux pages wiki qui contiennent des discussions)

-  27/8/2014 : création de la page (Suske)


Balise #VOIR_REPONSE{champ} et boucle (FORMULAIRES_REPONSES)

Une nouvelle balise qui sera peut-être utile à celleux qui veulent afficher leurs réponses enregistrées.

#VOIR_REPONSE{champ} à utiliser dans une boucle (FORMULAIRES_REPONSES).

Par défaut ça affiche la même chose que #VOIR_SAISIE. Mais on peut faire des variantes pour ne sortir que la valeur (en HTML mais sans le label et l’entourage) ou que la valeur brute dans la base.

  1. #VOIR_REPONSE{selection_1, brut}
  2. #VOIR_REPONSE{selection_1, valeur_uniquement}

Télécharger

En troisième argument on peut aussi passer la chaîne qu’on veut afficher pour les champs qui n’ont pas de réponse (champ vide). Sinon c’est le truc par défaut « Sans réponse ». On peut y mettre la chaîne vide si on ne veut rien.


Afficher le label des réponses d’un formulaire

d’après http://contrib.spip.net/Formidable-le-generateur-de-formulaires#forum481173

Pour afficher le label des réponses dans les réponses d’un formulaires, il faut :

-  Boucler sur la table spip_formulaire/ *input_1 ou votre valeur à vous

  1. <BOUCLE_spip_formulaires(FORMULAIRES)>
  2. [<p>(#SAISIES|unserialize|trouver_ma_saisie{input_1}|table_valeur{options/label})</p>]
  3. </BOUCLE_spip_formulaires_reponses>

Télécharger

-  Mettre la fonction crée par marcimat (un grand merci) dans mes_fonctions.php

  1. // Recupérer le label d'une saisie formidable
  2. function trouver_ma_saisie($saisies, $champ) {
  3.     include_spip('inc/saisies');
  4.     if (!is_array($saisies)) {
  5.         $saisies = unserialize($saisies);
  6.     }
  7.     if (!$saisies) {
  8.         return false;
  9.     }
  10.     $saisie = saisie_chercher($saisies, $champ);
  11.     return $saisie;
  12. }

Télécharger

-  Pour afficher les réponses, mais c’est déjà documenté :

  1. <BOUCLE_spip_formulaires_reponses(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}{nom=input_1}>
  2. [<p>(#VALEUR)</p>]
  3. </BOUCLE_spip_formulaires_reponses>

Télécharger

Afficher les résultats d’un formulaire par question et non par réponse (grouper toutes les réponses d’une question ensemble)

  1. <BOUCLE_formidable_id_form(FORMULAIRES){id_formulaire=#ENV{id}}>
  2. <BOUCLE_saisies(DATA){source tableau,#SAISIES|unserialize}>
  3. [(#SET{nom_saisie,[(#VALEUR|table_valeur{options/nom})]})]
  4. <B_spip_formulaires_rep>
  5. [<h3>
  6.         (#VALEUR|table_valeur{options/label})
  7. </h3>]
  8. <div class="reponses_form reponse[(#GET{nom_saisie})]">
  9. <BOUCLE_spip_formulaires_rep(FORMULAIRES_REPONSES){id_formulaire}{!par id_formulaires_reponse}{pagination 10 [(#GET{nom_saisie})]}>
  10.                         <div>
  11.                                 <h4>[Réponse N° (#ID_FORMULAIRES_REPONSE)][  - (#MAJ|affdate)]</h4>
  12.                                 [(#VOIR_REPONSE{[(#GET{nom_saisie})], valeur_uniquement})]
  13.                         </div>
  14. </BOUCLE_spip_formulaires_rep>
  15. [[<p>Il y a au total #GRAND_TOTAL contributions, cette liste en affiche (#TOTAL_BOUCLE)</p>]
  16. <div class="pagination">(#PAGINATION{page_precedent_suivant})</div>]
  17. </div>
  18. </B_spip_formulaires_rep>
  19. </BOUCLE_saisies>
  20. </BOUCLE_formidable_id_form>

Télécharger


Extraits de todoformidable

Après la validation

Quand le formulaire est validé, 3 options possibles dans la configuration de chaque formulaire :
-  réafficher le formulaire encore,
-  afficher les valeurs,
-  ne rien afficher.

Autorisations de formidable

#AUTORISER{repondre, formulaire, #ID_FORMULAIRE}

Permet par exemple de ne pas afficher le formulaire si l’utilisateur a déjà répondu. A combiner aussi avec les modèles fournis :
-  modeles/formulaires_reponse.html (affiche une réponse précise)
-  modeles/formulaire_analyse.html (stats de toutes les réponses)


Modèle <code></code formulaires_reponse >

http://contrib.spip.net/Formidable-Presentation-aux-Grottes-2010

Pour afficher les résultats dans spip, formidable fournit un modèle « formulaires_reponse ».

Il est également possible d’aller chercher les résultats pour les présenter de la manière voulue :

  1.     <b_numero_reponse>
  2.     <ul>
  3.     <boucle_numero_reponse(spip_formulaires_reponses)>
  4.     <li>reponse #ID_FORMULAIRE_REPONSE : <br>
  5.     <boucle__reponses_champ1 (spip_formulaires_reponses_champs){nom=textarea_1}>#VALEUR</boucle_reponse_champ1>
  6.     -
  7.     <boucle__reponses_champ2 (spip_formulaires_reponses_champs){nom=textarea_2}>#VALEUR</boucle_reponse_champ2>
  8.     -
  9.     <boucle__reponses_champ3 (spip_formulaires_reponses_champs){nom=input_1}>#VALEUR</boucle_reponse_champ3>
  10.     </li>
  11.     </boucle_numero>
  12.     </ul>
  13.     </b_numero_reponse>

Télécharger

Il faut alors connaitre le nom interne de chaque champ dans le formulaire concerné : input_1, ...

Depuis la version 2.6., il existe aussi la balise #VOIR_REPONSE{champ}.

C’est par contre plus compliqué pour faire directement à partir du name du champ car la correspondance avec le nom internet passe par une sérialisation dans le champ saisies de la table spip_formulaires. A moins qu’il n’y ait un filtre standard pour faire la correspondance...


Liste des principaux commits depuis la publication de l’article de doc initial

http://zone.spip.org/trac/spip-zone/log/_plugins_/formidable/trunk?action=stop_on_copy&mode=stop_on_copy&rev=84364&stop_rev=&limit=300&verbose=on

  1.  
  2.  
  3. - @83630        7 weeks         toutati        
  4. configurer si on veut que les formulaires s'affichent en pages publiques avec l'url de type
  5. spip.php?page=formulaire&id_formulaire=2&var_mode=recalcul
  6.  
  7.  
  8. - @83529        8 weeks         rastapopoulos  
  9. Une nouvelle balise qui sera peut-être utile à celleux qui veulent afficher leurs réponses enregistrées.
  10.  
  11.  
  12. #VOIR_REPONSE{champ} à utiliser dans une boucle (FORMULAIRES_REPONSES).
  13.  
  14.  
  15. Par défaut ça afficher la même chose que #VOIR_SAISIE. Mais on peut faire des variantes pour ne sortir que la valeur (en HTML mais sans le label et l'entourage) ou que la valeur brute dans la base.
  16.  
  17.  
  18. &lt;code class='spip'>#VOIR_REPONSE{selection_1 #VOIR_REPONSE{selection_1 , brut}
  19. #VOIR_REPONSE{selection_1, valeur_uniquement}&lt;/code > valeur_uniquement}
  20.  
  21.  
  22. En troisième argument on peut aussi passer la chaîne qu'on veut afficher pour les champs qui n'ont pas de réponse (champ vide). Sinon c'est le truc par défaut "Sans réponse". On peut y mettre la chaîne vide si on ne veut rien.
  23.  
  24.  
  25. - @81393        5 months        rastapopoulos  
  26. L'explication est un texte avec des raccourcis SPIP possible, on passe dans propre() (comme déjà dans la saisie d'ailleurs).
  27.  
  28.  
  29. - @81353        6 months        cedric  
  30. Amelioration de la liste des formulairs : on compte et on permet de trier par le nombre de reponses
  31. + par defaut les formulaires avec le plus de reponses en tete
  32. (il faudrait peut etre ceux avec les reponses les plus recentes en fait, a voir)
  33.  
  34.  
  35. - @81346        6 months        cedric  
  36. Statut archive (refuse) pour les formulaires : ils ne sont plus visibles en ligne mais on conserve le contenu et les reponses
  37. + la balise #FORMIDABLE n'affiche que les formulaires publies (ou prop en preview) dans le site public
  38.  
  39.  
  40. - @81079        6 months        cedric  
  41. Attention, modification substantielle sur les traitements :
  42.  
  43.  
  44. les traitements doivent noter qu'ils ont bien ete executes dans traitements? pour ne pas etre executes plusieurs fois
  45.     un traitement qui veut/doit passer apres un autre peut ne rien faire et rendre la main au premier tour pour laisser l'autre se faire
  46.     on refait la boucle 5 fois au maximum pour executer tous les traitements
  47.     si des traitements n'ont pas pu etre executes, on declenche un mail au webmestre avec l'erreur et un dump de dans le mail pour ne pas perdre de donnees
  48.     si aucun traitement n'a ete execute (defaut de configuration?) on declenche un mail au webmestre et un dump de dans le mail pour ne pas perdre de donnees
  49.  
  50.  
  51. Cette modification entraine une petite incompatibilite sur les traitements perso : ceux-ci seront executes 5 fois et une erreur sera generee si ils ne sont pas modifies pour renseigner traitements?
  52.  
  53.  
  54. - @80693        6 months        camille.sauvage        
  55. ajout du bouton "Supprimer toutes les réponses"
  56.  
  57.  
  58. - @80690        6 months        cedric  
  59. Extensibilite : fournir id_formulaire et id_formulaires_reponse si possible en sortie de la fonction traiter (pour les pipelines)
  60.  
  61.  
  62. - @80617        7 months        cedric  
  63. Gestion des liens formulaire<->objet :
  64.     lors de l'enregistrement d'un objet on reconnait les raccourcis qui inserent un formulaire et on maintient les liens
  65.     sur la fiche d'un formulaire on affiche les objets qui l'utilise
  66.     sur la fiche d'un objet on affiche les formulaires utilisés
  67.     correction du modèle <formXX> pour ne pas mettre en cache le formulaire dans le site public tout en affichant le formulaire dans l'espace privé
  68.     introduction du modèle <formidableXX> qui permet d'inserer un formulaire avec une syntaxe courte pour #ID_FORMULAIRE=XX
  69.     chaines de langue et styles
  70.     recreation des liens formulaires-articles lors de l'import f&t
  71.  
  72.  
  73. Pour le moment, on ne rattrape pas les liens sur les formulaires déjà utilisés dans des contenus sur une installation existante de formidable. Pour forcer la mise à jour des liens il suffit d'enregistrer le contenu qui utilise un formulaire
  74.  
  75.  
  76. - @80607        7 months        cedric  
  77. Pour pouvoir styler et cibler les formulaires, y ajouter 2 classes :
  78. formulaire_formidable_#ID_FORMULAIRE
  79. formulaire_formidable_#IDENTIFIANT
  80.  
  81.  
  82. - @80606        7 months        cedric  
  83. A l'installation les formulaires importés de f&t ont tous l'identifiant formXX avec XX l'ancien ID de form dans f&t
  84. Du coup le modele <formXX> recupere le formulaire avec identifiant formXX et assure la compatibilte des contenus existants
  85.  
  86.  
  87. - @80547        7 months        cedric  
  88. Les actions supprimer ne font que mettre en statut poubelle/refuse, plus de risque de pertes de données à cause d'une action maladroite
  89. on enleve le bouton "Supprimer" sur la page d'un formulaire
  90.  
  91.  
  92. - @80541        7 months        cedric  
  93. Prise en charge du statut sur les formulaires.
  94. Lors de l'import f&t les formulaires sans réponses sont mis en statut proposé, les autres en publiés
  95.  
  96.  
  97. - @80539        7 months        cedric  
  98. on ajoute une recherche sur la page des reponses, ça ne marche qu'avec le patch  http://core.spip.org/projects/spip/repository/revisions/21176
  99.  
  100.  
  101. - @80537        7 months        cedric  
  102. Import des donnees des formulaires de f&t à l'installation
  103. bugfix sur breadcrumb des reponses et formulaires non publies
  104. formulaire de recherche dans la page des formulaires
  105. nombre de formulaires et de reponses dans les listes
  106.  
  107.  
  108. - @80535        7 months        cedric  
  109. a l'installation de formidable, import automatique de tous les formulaires et sondages de forms&tables
  110. (mais il manque la prise en compte du statut, qui serait mieux, et surtout l'import des données, prochain step)
  111.  
  112.  
  113. - @80073        7 months        nicolas.dorigny        
  114. Ajout d'une date de création du formulaire (nommée date_crea parce que date est un mot reservé mysql)
  115.  
  116.  
  117. - @79458        8 months        prigent.yohann  
  118. Ajout d'un nouveau champ dans les traitements permettant de spécifier l'adresse email d'un des destinataires comme un des champs du formulaire.
  119.  
  120.  
  121. - @77520        10 months       camille.sauvage        
  122. Ajout du paramètre de configuration permettant à un auteur de modifier le statut d'une des réponses à un formulaire dont il est l'auteur ou l'un des auteurs. Modifie le comportement par défaut où seul un admin pouvait le faire.
  123.  
  124.  
  125. - @75139        12 months       maieul  
  126. insérer l'aide mémoire aussi dans la page de config des champs (utile lorsque pourra conditionner les traitements des champs)
  127.  
  128.  
  129. - @73326        15 months       camille.sauvage        
  130. Ajout de la possibilité d'associer des auteurs à un formulaire. Le choix s'effectue dans la config globale du plugin. Une fois un formulaire créé par un auteur, il en devient auteur et peut ajouter et supprimer des auteurs.
  131. Seul les auteurs associés à un formulaire peuvent en voir les résultats
  132.  
  133.  
  134. - @71598        17 months       camille.sauvage        
  135. Export de l'analyse des réponses en format CSV
  136.  
  137.  
  138. - @71586        17 months       camille.sauvage        
  139. possibilité d'autoriser un admin restreint à administrer les formulaires et consulter les résultats... par défaut à 'false'
  140.  
  141.  
  142. - @70610        18 months       patfr  
  143. Permettre l'annalyse d'un seul champ au lieu du formulaire entier :
  144. Exemple : #INCLURE{fond=modeles/formulaire_analyse,id_formulaire,nom=checkbox_1}
  145. TODO: si besoin, exploiter les listes du genre : nom=checkbox_1|input_1
  146. (souvent l'analyse de tous les champs n'est pas nécessaire...)
  147.  
  148.  
  149. - @66707        23 months       suske  
  150. Rustine jQuery pour éviter que les navs html5 compliant n'empêchent la mise à jour à cause des "required".
  151. TODO: le faire en php pour que ce soit corrigé pour tous... => {{Jai eu ce problème à nouveau en aout 2014}}
  152.  
  153.  
  154. - @65632        2 years         marcimat        
  155. Migration un peu plus vers SPIP 3 avec spip_formulaires_reponses en objet éditorial
  156.  
  157.  
  158. - @65603        2 years         marcimat        
  159. On permet de choisir l'affichage des statistiques de réponses après la saisie d'un formulaire (et si on a déjà rempli le formulaire et qu'on peut pas resaisir).
  160. On permet de configurer la classe css appliquée sur le modèle des barres de progression des statistiques.

Télécharger


Formitable

FormiTable (developpement arrêté)

Rq : plugin plein de potentiel mais non maintenu

<blockquote class="spip">

FormiTable est un plugin de Formidable et lui fournit un traitement pour enregistrer les saisies de ’formidable’ dans une table utilisateur, avec une correspondance de chaque champ d’un formulaire vers un champ de la table. Etat « en cours de développement ».

</blockquote>

Voir le projet de documentation du plugin formitable