Formidable, le générateur de formulaires

Un générateur de formulaires facilement configurable pour les non-informaticiennes et facilement extensible pour les développeur⋅euses.

Cette documentation est valable à partir de la version 6.1.0 de Formidable.

Introduction

Historiquement, deux plugins avaient déjà été développés précédemment pour gérer des formulaires :

  • Forms &Tables, qui n’a pas été complètement porté pour SPIP 2.
  • et spip-formulaire créé par artego mais qui n’était plus maintenu.

La question s’est donc posée : construire sur la base d’un des deux plugins ou repartir de zéro ?
Form &Table, très complet pour les utilisateurs, présentait l’inconvénient d’avoir un côté « fourre-tout » qui le rendait difficilement modifiable et difficile à personnaliser par les dévs.

Il a finalement été décidé de repartir de zéro pour proposer quelque chose :

  • de plus facile à utiliser pour les utilisateurs d’une part,
  • mais aussi de plus facile à personnaliser pour les développeur⋅euses.
    Avec le parti pris de se baser de préférence sur plusieurs petits plugins spécialisés et de tirer parti de la nouvelle norme CVT.

Interface utilisateur

L’utilisation basique de l’interface est abordée dans ce screencast : Mon premier formulaire pas à pas : c’est Formidable !

Appeler mon formulaire

Vous devez appeler le formulaire ayant le nom « formidable », en lui passant en paramètre l’identifiant de votre formulaire.

Dans un contenu

Utilisez le modèle <formulaire> classique : <formulaire|formidable|id=34> ou bien <formulaire|formidable|id=contact>

Dans un squelette


#FORMULAIRE_FORMIDABLE{34} ou bien #FORMULAIRE_FORMIDABLE{contact}

Afficher les résultats du formulaire

Dans un contenu

Utilisez le modèle <formulaire_analyse|id_formulaire=34>

Pré-remplir dynamiquement les champs d’un formulaire

À noter, vous avez la possibilité de surcharger dans l’appel, les valeurs par défaut des champs de votre formulaire. Pour cela, vous devez passer un tableau de nom=>valeur en deuxième paramètre. Vous pourrez trouver les noms de vos champs dans l’aide-mémoire situé sur la page de configuration des traitements.

Dans un contenu

Le tableau de valeurs dans un paramètre defaut sous forme d’une suite de chaînes « clé,valeur » séparée par des virgules :
<formulaire|formidable|id=contact|defaut=hidden1,valeur,input_5,autrevaleur>

Dans un squelette

Le tableau en deuxième paramètre :

#FORMULAIRE_FORMIDABLE{contact, #ARRAY{nom_du_champ, Ma valeur}}

C’est particulièrement utile pour remplir un champ caché avec une valeur dynamique venant du squelette :

#FORMULAIRE_FORMIDABLE{contact, #ARRAY{hidden_1, #ID_DOCUMENT}}

Autres options utilisable dans le squelette

Il est possible de passer des options comme troisième argument du formulaire, sous forme de tableau (#ARRAY).

Options possible comme troisième argument de #FORMULAIRE_FORMIDABLE
Nom de l’optionFonctionType
forcer_modif Permet de forcer la modification d’une réponse, même si non autorisé Booléen
id_formulaires_reponses Identifiant de la réponse à modifier Entier
no_ajax Désactiver l’ajax sur le formulaire Booléen
traiter_email_destinataires Destinataires pour le traitement Tableau (#ARRAY) d’emails ou liste d’emails séparés par des virgules
traiter_email_destinataires_methode Indique si traiter_email_destinataires doit remplacer les emails déjà configurés dans le traitement ou les ajouter Au choix 'remplacer' ou 'ajouter' (valeur par défaut)
url_redirect Url de redirection Chaine

Exemple d’un formulaire Formidable dont l’identifiant est contact_libre et dont l’email destinataire est dans le champ email de la table de votre objet #EMAIL de la table spip_contacts ….

<div class="ajax">
#FORMULAIRE_FORMIDABLE{contact_libre,'',#ARRAY{traiter_email_destinataires,#EMAIL}}
</div>

Case unique

Pour rendre obligatoire la réponse oui à une case unique (pour la validation de conditions d’utilisation par exemple), il faut simplement rendre le champ obligatoire.

Courriels de notification

Une option des traitements proposés permet d’envoyer un mail de notification automatiquement, à chaque saisie d’un formulaire.

Le squelette par défaut employé pour la mise en forme de ces mails est plugins/formidable/notifications/formulaire_email.html. Vous pouvez le copier dans le répertoire ’notifications’ de votre squelette et l’y modifier à votre guise. Cette modification vaudra pour tous les formulaires.

Pour utiliser un squelette spécifique pour les mails de notification de l’un seulement des formulaires définis avec Formidable, il suffit d’ajouter son squelette dans le répertoire ’notifications’ de votre dossier squelettes, mais en ajoutant l’identifiant.

IDENTIFIANT étant l’identifiant du formulaire défini dans Formidable, les squelettes doivent se nommer :
formulaire_IDENTIFIANT_email.html pour le mail aux destinataires
formulaire_IDENTIFIANT_accuse.html pour l’accusé de réception du visiteur

Conservation des IP

Les adresse IP des personnes répondant aux formulaires sont stockées en base de donnée. Depuis la version 1.5 (SPIP 3) / 0.7 (SPIP < 3), elle sont automatiquement hashé, de manière à ce que l’IP ne soit plus reconnaissable, au bout de 124 jours (environ 4 mois).

Pour changer ce délai, vous pouvez redéfinir la constante _CNIL_PERIODE dans votre fichier mes_options.php.

Par exemple :

define('_CNIL_PERIODE', 24*3600);

permet de hasher les IP toutes les 24 heures.

Si vous voulez désactiver le hashage, mettez la valeur à 0.

Envoi de fichiers

Lire l’article complémentaire : Envoyer des fichiers avec un formulaire Formidable.

Mise en forme des saisies

Le plugin ne prévoit aucun réglage de mise en forme des saisies : c’est à chaque squelette d’avoir ses styles. Il respecte cependant la convention d’écriture des formulaire SPIP. Il permet d’ajouter des classes spécifiques sur les saisies.

Affichage des réponses sous forme de tableau

Le plugin Formidable Tablesorter permet d’afficher sous forme de tableau les réponses, dans l’espace privé, avec possibilité de tri et de filtre.

Voir aussi sur le wiki


-  Complément de doc et exemples sur les boucles et balises de formidable
-  Exemples de stylage CSS d’un formulaire Formidable
-  todoFormidable
-  Formidable, présentation aux Grottes (2010)

Discussion

812 discussions

  • Hello,

    D’abord merci pour ce superbe plugin !

    J’ai cependant une petite question / remarque / problème... Pour défininir la valeur d’un champ « hidden », je passe en GET dans l’URL un paramètre « id_champ_machin » et je loade la valeur comme expliqué dans la doc lors de l’appel au formulaire :

    #FORMULAIRE_FORMIDABLE{mon_formulaire, #ARRAY{hidden_1, #SELF|parametre_url{id_champ_machin}}}

    Jusqu’ici, tout va bien, la valeur du champ est bien settée...

    Le problème se produit au submit :

    * la réponse en BDD est bien enregistrée
    * mais côté front, on ne voit pas apparaitre le message de confirmation ni ce qui est défini dans les paramètre de traitement du formulaire : le formulaire reste affiché et réinitialisé

    J’ai remarqué que si on avait le paramètre « var_mode », celui-ci était bien nettoyé au submit, mais pas les autres paramètres présents dans l’URL, et j’ai l’impression que le problème vient de là.

    Est-ce qu’il s’agit d’un bug ou je m’y prends mal ?

    Merci !

    Répondre à ce message

  • 8

    Bonjour, je viens d’installer le plugin et j’ai 2 problèmes :

    -  Je n’arrive pas à changer le statut de publication du formulaire (proposé à l’évaluation, publié en ligne, etc). Je sélectionne un statut et clique « changer », mais le statut reste sur le choix « vide » du select, et quand j’essaie de publier mon formulaire du coup rien ne s’affiche.

    -  Je n’arrive pas à déplacer les champs « explication » a la souris, et lorsque j’édite un champ explication, les onglets « Affichage etc » sont décalés vers la gauche et on ne peut pas éditer correctement. Je suis sous Debian Testing avec les dernières versions de Chrome et Firefox.

    • Pas d’idée d’où pourrait provenir le problème ?

      Je ne peux pas avancer... pas d’erreur apparente, ni dans les logs PHP ni dans le debug de Spip

    • « Les choses à faire avant de poser une question » :)

    • Ok ok pardon... :)

      -  J’ai désactivé tous les plugins puis réactivé Formidable (et ses plugins dépendants)
      -  Je suis sous SPIP 3.0.17, PHP 5.6.7-1, Formidable 2.9.0 - stable, MySQL 5.5.43-0+deb8u1, API de vérification 1.0.7 - stable, Facteur 3.0.20 - stable, Saisies pour formulaires 2.3.1 - stable, SPIP Bonux 3.1.0 - stable, YAML 1.5.2 - stable

      -  Je travaille en localhost, je ne peux pas fournir une URL de test

      -  Mon problème est sur la partie privée du site, impossible de changer le statut de publication des formulaires. Aucun message d’erreur ne s’affiche

      -  Pas d’erreur non plus dans les logs PHP / Apache

      Est-ce que je peux fournir d’autres informations ?

    • Pour le deuxième point ça peut avoir à voir avec les multiples modifs d’hier. Il faudrait mettre à jour Saisies qui a encore bougé ce matin… À voir… :)

      Par contre pour le premier point, là comme ça je ne vois pas de rapport avec les modifs faites hier car le formulaire de changement de statut est fabriqué par SPIP, pas par le plugin lui-même.

    • J’ai mis à jour tous les plugins qui avaient des mises à jour, mais ça n’a pas change le problème.

      Quand je vais dans l’édition des formulaires, je n’ai aucun formulaire listé, alors que ceux que j’ai créé sont bien dans la base de données, je les vois dans la table spip_formulaires

    • J’ai fini par effacer manuellement les tables sql du plugin, puis effacer le plugin, puis réinstaller, et maintenant j’ai 2 fois cette erreur qui apparait :

      Erreur SQL 1054
      Unknown column 'formulaires.id_rubrique' in 'field list' 
      SELECT COUNT(L1.id_formulaires_reponse) AS compteur_formulaires_reponses, '', formulaires.id_formulaire, 0 as points, formulaires.id_rubrique, formulaires.statut, formulaires.titre, formulaires.identifiant FROM spip_formulaires AS <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Zm9ybXVsYWlyZXM8L2NvZGU+"></span> left JOIN spip_formulaires_reponses AS L1 ON ( L1.id_formulaire = formulaires.id_formulaire ) WHERE (formulaires.statut = 'refuse') GROUP BY formulaires.id_formulaire ORDER BY formulaires.id_formulaire DESC
    • Il n’y a jamais eu de champ « id_rubrique » dans le formulaire, donc je ne vois pas du tout d’où sort cette requête et ce qui fait que ce champ est ajouté à la demande… :(

    • Merci pour ton retour.

      Je travaille actuellement sur la refonte d’un site, je vais demander aux développeurs s’ils ont fait des modifications qui pourraient avoir un lien avec cette erreur.

    Répondre à ce message

  • 2

    Bonjour,

    J’ai migré mon site de la version 2.1 vers la version 3 de SPIP ; Tout marche bien avec ce plugin, mais quand je vais dans l’interface privée, les champs dépassent des limites du cadre en largeur, ce qui fait que je ne peux pas modifier les champs, car je n’arrive pas à accéder aux onglets extrèmes.
    Le problème apparaît sous Firefox et IE sous Windows 7.
    J’ai modifié le zoom du navigateur, mais le problème subsiste.

    Avez-vous une idée ?

    Merci,
    Bien cordialement,
    Bruno.

    • Je ne reproduis pas, est-ce toujours le cas avec les dernières versions des plugins, et notamment de Saisies puisque c’est là qu’est le constructeur ?

    • Bonjour,

      Le problème est bien résolu avec les dernières versions.

      Merci !
      Bien cordialement,
      Bruno.

    Répondre à ce message

  • 1

    Bonjour,

    Je ne sais pas si c’est moi mais j’ai des soucis de formatage :
    Si j’indique @nom_site_spip@ dans le champ Sujet du message ou dans Nom de l’expéditeur de l’accusé de réception dans les emails reçus cela apparait tel quel.

    Donc j’ai remplacé par le nom du site en dur mais (pas de chance) les caractères accentués du champ ne sont pas en UTF8. (Léon au lieu de Léon) dans le champ Nom de l’expéditeur de l’accusé de réception.
    Dans le sujet du message c’est OK pour l’encodage..

    Autre chose : les blocs du formulaire ne veulent pas pas être repliés (la compression html n’est pas activée sur le site).

    et,les titres des blocs « groupe de champ » apparaissent en double dans les emails reçus.

    dd

    Répondre à ce message

  • 1

    Bonjour,

    Je souhaiterais réutiliser les données de mon formulaire directement sans passer par l’export en fichier csv. Je n’arrive pas à trouver l’endroit où la base de donnée de mon formulaire est enregistrée par le plugin. Pourriez-vous m’aider ? Merci

    • Dans (FORMULAIRES_REPONSES) (infos communes à chaque réponse) et (FORMULAIRES_REPONSES_CHAMPS) (nom=>valeur de chaque champ)

    Répondre à ce message

  • 1

    Bonjour
    Merci pour ce super plug-in !!
    J’ai un petit souci avec l’accusé de réception, je souhaite personnaliser le mail avec une des réponses du formulaire, en l’occurrence une réponse via une liste déroulante. Je mets donc :« Formulaire concernant @selection_1@ »
    Par contre le mail affiche « Formulaire concernant choixX » par exemple plutôt que l’intitulé de la réponse. Je m’y prends mal ?

    Merci d’avance

    • Non c’est un bug effectivement dans le remplacement des @. Ça va chercher la réponse brute qui est stockée, ce qui fonctionne pour les champs libres mais pas pour les saisies avec des choix. Car c’est donc l’identifiant (value) de la réponse qui est utilisée, et non le label humain. C’est donc un truc à corriger.

    Répondre à ce message

  • 1

    Bonjour,
    Je débute dans l’utilisation des formulaires pour mettre en place une procédure de dons sur le site http://www.cubacoop.org/
    J’utilise les plugins ;
    Formidable 2,8,0
    Saisies pour formulaires 1.42.1
    YAML1.5.2
    Transaction 0.3.1
    Facteur 3.0.14
    Mes premiers test semblent satisfaisants mais j’ai le message d’erreur ci-dessous lorque j’essaye d’exporter la liste des saisies :
    Strict Standards: Non-static method Facteur::html2text() should not be called statically in /homepages/19/d147752321/htdocs/cubacoop/plugins/auto/formidable/v2.8.0/action/exporter_formulaires_reponses.php on line 71
    Une idée pour corriger cette erreur ?

    Le formulaire peut être testé ici

    • Problème de version de PHP qui montrait plus d’erreur. Je pense qu’en mettant à jour Facteur ça devrait aller.

    Répondre à ce message

  • 1

    Bonjour,
    Existe-t-il une possibilité pour exporter la liste des réponses en fichier joint à une adresse mail ?

    • Non, en revanche toutes les réponses sont téléchargeables en tableau pour les admins dans l’interface. Mais ya pas d’automatismes pour les envoyer par email toutes en même temps.

    Répondre à ce message

  • 5
    jbtours

    Bonjour, comment surcharger un champs avec l’id de la réponse ?
    Merci

    • Pas compris la question. :)

    • jbtours

      Oui pardon ce n’est pas très explicite...
      Je voudrais pouvoir renvoyer par mail, ou mieux afficher dans le formulaire l’id de la reponse (qui est générée à l’enregistrement de la réponse)
      à la place de mon id_auteur qui me sert de test
      #FORMULAIRE_FORMIDABLEdamage2,ARRAYinput_5,#SESSIONid_auteur

    • Il y a cette fonction qui permet de récupérer les réponses d’une personne pour un même formulaire. Peut sortir plusieurs ID par contre, faut prendre la dernière. Normalement le fichier dans « inc » est chargé lorsque le formulaire est sur une page, sinon faut trouver un moyen de le charger.

    • jbtours

      Salut et merci beaucoup pour les réponses (je ne vois pas le code de ta fonction évoquée).
      En fait c’est pour gérer l’anonymat medecin/patient, donc plutôt que le dernier ID des réponses d’un utilisateur, c’est plutôt le dernier id des réponses au formulaire en question que je vais exploiter..
      j’avais penser récupérer cet id reponse avec la boucle ci dessous (j’ai enlever les <> car ça passe pas) et rediriger à la fin du formulaire rempli vers une page html du style :
      BOUCLE_A(FORMULAIRES)identifiant=test
      BOUCLE_reponses(FORMULAIRES_REPONSES)id_formulaire
      /BOUCLE_reponses
      #SETnbreponse,#TOTAL_BOUCLE
      //B_reponses
      /BOUCLE_A
      « #EDITtexte texte »>Merci, votre reponse est enregistree sous le numero #GETnbresponse
      ainsi il note le numéro d’id que le gestionnaire de l’étude retrouve dans la fiche de la réponse de l’espace privé, mais à l’export je n’ai pas le champs idreponse dans le csv...
      bref c’est un peu tiré par les cheveux, non ?

    • Je parle bien des réponses d’une personne pour un formulaire précis. J’ai raté mon copier coller je sais pas comment :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/formidable/trunk/inc/formidable.php#L94

    Répondre à ce message

  • 2

    Bonjour,
    je vais sans doute prochainement jouer un peu avec ce plugin et notamment chercher à améliorer l’accessibilité par contre je n’arrive pas à trouver où est géré le squelette qui gère l’affichage des champs.
    Par exemple je voudrais remplacer le hx généré comme titre du groupe de champ par un élément legend, idem pour les cases à cocher ou bouton radios je voudrais baliser l’ensemble dans un fieldset avec legend pour l’intitulé du groupe ou alors mettre un peu d’aria là dessus.

    • Ah génial, c’est une super nouvelle !

      En ce qui concerne l’architecture, le cœur de Formidable est basé essentiellement sur le plugin Saisies. Tous les champs sont décrits en tant que saisies du plugin éponyme, puis enregistré dans un tableau standardisé, dans le champ « saisies » de la table des formulaires (spip_formulaires).

      Le tableau correspondant à une liste de saisies est décrit suivant une norme définie par le plugin Saisies et documenté ici : Saisies#API. Avec pour chacune son type et ses options éventuelles.

      Ensuite, pour faire très rapide, une fonction prend ce tableau en paramètre et génère chaque saisie une par une. Le squelette HTML de chaque saisie est dans le sous-dossier /saisies/ du plugin Saisies. Le fichier particulier /saisies/_base.html contient tout ce qui est commun et appelle ensuite le code particulier (sauf pour quelques saisies précises qui sont définies comme étant complètes, comme par exemple la saisie « fieldset »).

      Revenons à ton cas : modifier l’accessibilité pour Formidable, signifie donc modifier les squelettes de Saisies, ce qui signifie donc modifier tous les formulaires du monde qui utilise Saisies comme « framework » pour lister leurs champs. Ce n’est pas forcément un mal hein, mais c’est juste qu’il faut bien voir ce que ça implique. Et le fait que ça va potentiellement changer le code généré chez plein de monde, du coup (et donc casser des choses). Il va peut-être falloir prévoir une branche… (Saisies est pour l’instant uni-branche depuis le début, et multi-version de SPIP, mais là ça va peut-être devoir changer du coup.)

    • Hello Goetsu, as-tu des nouvelles de ces améliorations d’accessibilité ?
      As-tu des trucs à partager ?

    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