Formidable/formitable, générateurs de formulaires

Balises et boucles avec Formidable

SPIP-Contrib :: Carnet Wiki :: Formidable/formitable, générateurs de formulaires :: Recherche :

Balises et boucles avec Formidable

Cette page doit devenir une documentation complète (ou complétant celle qui existe sur contrib) à propos de formidable, à sortir du carnet publié sur contrib. Des choses devront probablement sortir d’ici pour 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 à celles et ceux 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>

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 = saisies_chercher($saisies, $champ);
  11. return $saisie;
  12. }

Télécharger

Possibilité aussi d’utiliser tout simplement la fonction "saisies_chercher", ce qui dispense d’ajouter la fonction "trouver_ma_saisies" dans le fichier "mes_options.php" :

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

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

Modifier un champs d’une réponse avec le plugin Crayon depuis la partie publique

Il n’est pas possible d’utiliser la balise #VOIR_REPONSE pour éditer une réponse car cette balise fonctionne dans une boucle FORMULAIRES_REPONSES alors que les réponses elles-mêmes se trouvent dans le champ « valeur » de la table FORMULAIRES_REPONSES_CHAMPS.

Donc pour modifier le contenu d’un champs d’une réponse à un formulaire avec Crayon, il créer une boucle sur FORMULAIRES_REPONSES_CHAMPS comme ci-dessous

  1. <BOUCLE_spip_formulaires_reponses(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}{nom=input_1}>
  2. [<p class="#EDIT{valeur}">Nom: (#VALEUR)</p>]
  3. </BOUCLE_spip_formulaires_reponses>

Télécharger

A noter que seuls les admins complets peuvent editer des textes provenant d’une table non-SPIP.

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 <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.0, 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. - @83630 7 weeks toutati
  2. configurer si on veut que les formulaires s'affichent en pages publiques avec l'url de type
  3. spip.php?page=formulaire&id_formulaire=2&var_mode=recalcul
  4.  
  5. - @83529 8 weeks rastapopoulos
  6. Une nouvelle balise qui sera peut-être utile à celleux qui veulent afficher leurs réponses enregistrées.
  7.  
  8. #VOIR_REPONSE{champ} à utiliser dans une boucle (FORMULAIRES_REPONSES).
  9.  
  10. 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.
  11.  
  12. <code class='spip'>#VOIR_REPONSE{selection_1, brut}
  13. #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.

-  @81393 5 months rastapopoulos
L’explication est un texte avec des raccourcis SPIP possible, on passe dans propre() (comme déjà dans la saisie d’ailleurs).

-  @81353 6 months cedric
Amelioration de la liste des formulairs : on compte et on permet de trier par le nombre de reponses
+ par defaut les formulaires avec le plus de reponses en tete
(il faudrait peut etre ceux avec les reponses les plus recentes en fait, a voir)

-  @81346 6 months cedric
Statut archive (refuse) pour les formulaires : ils ne sont plus visibles en ligne mais on conserve le contenu et les reponses
+ la balise #FORMIDABLE n’affiche que les formulaires publies (ou prop en preview) dans le site public

-  @81079 6 months cedric
Attention, modification substantielle sur les traitements :

les traitements doivent noter qu’ils ont bien ete executes dans traitements ? pour ne pas etre executes plusieurs fois
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
on refait la boucle 5 fois au maximum pour executer tous les traitements
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
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

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 ?

-  @80693 6 months camille.sauvage
ajout du bouton "Supprimer toutes les réponses"

-  @80690 6 months cedric
Extensibilite : fournir id_formulaire et id_formulaires_reponse si possible en sortie de la fonction traiter (pour les pipelines)

-  @80617 7 months cedric
Gestion des liens formulaire<->objet :
lors de l’enregistrement d’un objet on reconnait les raccourcis qui inserent un formulaire et on maintient les liens
sur la fiche d’un formulaire on affiche les objets qui l’utilise
sur la fiche d’un objet on affiche les formulaires utilisés
correction du modèle pour ne pas mettre en cache le formulaire dans le site public tout en affichant le formulaire dans l’espace privé
introduction du modèle qui permet d’inserer un formulaire avec une syntaxe courte pour #ID_FORMULAIRE=XX
chaines de langue et styles
recreation des liens formulaires-articles lors de l’import f&t

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

-  @80607 7 months cedric
Pour pouvoir styler et cibler les formulaires, y ajouter 2 classes :
formulaire_formidable_#ID_FORMULAIRE
formulaire_formidable_#IDENTIFIANT

-  @80606 7 months cedric
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
Du coup le modele recupere le formulaire avec identifiant formXX et assure la compatibilte des contenus existants

-  @80547 7 months cedric
Les actions supprimer ne font que mettre en statut poubelle/refuse, plus de risque de pertes de données à cause d’une action maladroite
on enleve le bouton "Supprimer" sur la page d’un formulaire

-  @80541 7 months cedric
Prise en charge du statut sur les formulaires.
Lors de l’import f&t les formulaires sans réponses sont mis en statut proposé, les autres en publiés

-  @80539 7 months cedric
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

-  @80537 7 months cedric
Import des donnees des formulaires de f&t à l’installation
bugfix sur breadcrumb des reponses et formulaires non publies
formulaire de recherche dans la page des formulaires
nombre de formulaires et de reponses dans les listes

-  @80535 7 months cedric
a l’installation de formidable, import automatique de tous les formulaires et sondages de forms&tables
(mais il manque la prise en compte du statut, qui serait mieux, et surtout l’import des données, prochain step)

-  @80073 7 months nicolas.dorigny
Ajout d’une date de création du formulaire (nommée date_crea parce que date est un mot reservé mysql)

-  @79458 8 months prigent.yohann
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.

-  @77520 10 months camille.sauvage
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.

-  @75139 12 months maieul
insérer l’aide mémoire aussi dans la page de config des champs (utile lorsque pourra conditionner les traitements des champs)

-  @73326 15 months camille.sauvage
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.
Seul les auteurs associés à un formulaire peuvent en voir les résultats

-  @71598 17 months camille.sauvage
Export de l’analyse des réponses en format CSV

-  @71586 17 months camille.sauvage
possibilité d’autoriser un admin restreint à administrer les formulaires et consulter les résultats... par défaut à ’false’

-  @70610 18 months patfr
Permettre l’annalyse d’un seul champ au lieu du formulaire entier :
Exemple : #INCLUREfond=modeles/formulaire_analyse,id_formulaire,nom=checkbox_1
TODO : si besoin, exploiter les listes du genre : nom=checkbox_1|input_1
(souvent l’analyse de tous les champs n’est pas nécessaire...)

-  @66707 23 months suske
Rustine jQuery pour éviter que les navs html5 compliant n’empêchent la mise à jour à cause des "required".
TODO : le faire en php pour que ce soit corrigé pour tous... => Jai eu ce problème à nouveau en aout 2014

-  @65632 2 years marcimat
Migration un peu plus vers SPIP 3 avec spip_formulaires_reponses en objet éditorial

-  @65603 2 years marcimat
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).
On permet de configurer la classe css appliquée sur le modèle des barres de progression des statistiques.


Formitable

FormiTable (no more developped) : plugin avec potentiel mais non maintenu

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, utilisé mais bugué".

Voir le projet de documentation du plugin formitable