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

811 discussions

  • 1

    Bonjour,

    J’ai un formulaire un peu complexe créé sous SPIP 3.1.

    J’ai mis à jour en SPIP 3.2.1 SVN + tous les plugins en version SVN aussi.

    J’ai voulu tester la v2 de Yaml et je suis tombé sur plusieurs bug, dont un qui semble vraiment propre à formidable/saisie puisqu’il se produit avec les v1 de Yaml.

    Donc, sur http://dl.free.fr/h3Y8EY0Ss il y a un zip avec dedans formulaire-contact_default.yaml

    À l’importation dans formidable (PHP 7.0.30 sous Windows), j’ai l’erreur suivante : Unable to parse string : Unable to parse line 1 ( id_formulaire : ’2’).

    Une idée ? Une solution ?

    • Au temps pour moi, c’est la V2 de YAML qui crée un fichier .yaml proplématique : 2 espaces en plus à chaque début de ligne.

      Avec http://dl.free.fr/gXHv1eavg exporté par la V1 (de YAML), l’importation (en V1) marche très bien.

      Un peu de bruit pour rien.

    Répondre à ce message

  • 3
    christophe

    Bonjour,

    Je rencontre un bug php avec le formulaire, uniquement avec les cases à cocher.
    J’ai créé un formulaire avec de multiples champs (radio, case à cocher, bloc de texte, texte, liste déroulante), mais à la validation du formulaire il retourne toujours le message suivant et ne formate jamais le sujet du message envoyé par mal à l’aide des raccourcis.

    Warning : Illegal offset type in isset or empty in (...)/plugins/auto/formidable/v3.7.2/traiter/email.php on line 124

    Warning : Cannot modify header information - headers already sent by (output started at (...)/plugins/auto/formidable/v3.7.2/traiter/email.php:124) in (...)/ecrire/public/evaluer_page.php(51) : eval()’d code on line 20

    J’ai masqué l’adresse de mon site.

    J’ai remarqué en procédant par élimination que si je supprimais mes cases à cocher je n’avais plus ni ce message ni de problème de formatage du sujet du message.

    Je tourne sous php 5.4.45 avec la version 3.7.2 SVN [109790] de formidable.

    Une idée ? J’aimerai bien utiliser les cases à cocher, mais je n’ai pas de compétence en php pour débugguer.

    Merci !

    • Bonjour,

      c’est un warning, qui normalement ne devrait pas s’afficher sur un site en production, car il s’agit d’un niveau bas d’erreur. Il faudrait voir avec l’hébergeur à ne pas les afficher.

      Cela étant, si tu as de telles notices, c’est qu’il y a un problème dans le code. Problème qu’on peut à priori résoudre.
      Peux tu
      1. Faire la mise à jour de formidable vers la toute dernière version, pour qu’on sache si on a toujours ce problème.
      2. M’envoyer (monprenom@monprenom.net, sans le trema) un export yaml du formulaire qui pose problème que je puis reproduire ton bug en local.

    • Hello

      Je rencontre le même souci (affichage du warning comme décrit plus haut).
      Ce que j’ai pu observer, c’est que le warning apparaît lorsque le formulaire contient des cases à cocher ET qu’au moins une case est cochée.

      J’ai testé sur 2 configs :

      • SPIP 3.1.6 et formidable 3.10.0
      • SPIP 3.1.7 et formidable 3.7.2

      Bonne journée !
      Sandrine

    • A oui, je comprend. La version 3.10.2 corrige cela.
      Elle sera disponible bientôt.

      Dans le cas de case à cocher, j’ai décidé de séparer les différentes valeurs par une virgule.

    Répondre à ce message

  • 3

    Bonjour,
    Je rencontre un problème avec mon formulaire Formidable.
    Il est fonctionnel sur l’article dans la partie privé du site mais il n’apparait pas dans l’article quand je le publie.
    Il est inséré dans un article comme ceci :

    <?php include_once("/opt/nursit/sys/home/nursit/matrice/public/4.2/07/spip/ecrire/balise/formulaire_.php"); if ($lang_select = "fr") $lang_select = lang_select($lang_select); inserer_balise_dynamique(balise_FORMULAIRE__dyn(arguments_balise_dyn_depuis_modele('FORMULAIRE_FORMIDABLE'), 'passeurs_images'), array('', '', '', '', 'fr', '1')); if ($lang_select) lang_select(); ?>

    Je ne comprends pas car j’ai procédé de la même manière il y a quelques mois et je n’ai pas rencontré de problème :
    http://parlemtv.fr/?Inscription-au-prochain-atelier-video-de-Parlem-TV
    Depuis j’ai fait une mise à jour de quelques plugins... Le site tourne avec SPIP 3.0.24
    Merci
    Jluc

    • je vois bien le formulaire ....

    • En fait j’avais oublié de publier le formulaire en ligne. Par contre j’ai un problème d’affichage.
      Dans la partie conception, et dans l’article visionné dans l’interface privée, mes phrases explicitant les choix sont bien placées à droite par contre dans l’article publique celles-ci sont à gauche et cela crée une surcharge...
      http://parlemtv.fr/?Participez-a-l-aventure-Passeurs-d-images

    • ce sont des problèmes de css, pas lié directement au plugin en tant que tel, qui ne s’occupe pas de cet aspect.

      Je n’ai pas compris ce que vous voulez dire par « mes phrases explicitant les choix sont bien placées à droite par contre dans l’article publique celles-ci sont à gauche et cela crée une surcharge ». Je vous suggère de demander de l’aide sur une la liste des utilisateur/trices de SPIP, où des gens pourront vous aider à adapter votre fichier perso.css

    Répondre à ce message

  • 3

    Bonjour,

    Quelqu’un pourrait-il m’expliquer étape par étape comment faire pour que formidable soit bien pris en compte par nospam ainsi que comment y inclure un captcha s’il vous plait ?

    Le problème en l’état actuel des choses c’est que pour ce plugin je ne vois ni ou est la partie traitement du formulaire ni comment la modifier pour qu’elle prenne en compte nospam ou un captcha. à mes yeux le captcha reste tout de même une méthode valide et efficace pour protéger son formulaire contre les spams, je vous serai donc reconnaissant de m’expliquer si possible d’une part son inclusion dans le plugin formidable ainsi que l’inclusion de la partie traitement serveur (le nom du fichier à modifier, la fonction à modifier et le contenu à y inclure).

    Je vous en remercie d’avance, cela fait plus d’une semaine que je me casse la tête sur ces spams et je ne vois vraiment pas quelle serait la solution ici pour que formidable prenne en compte un captcha et / ou nospam.

    Bien cordialement,

    Axel.

    Répondre à ce message

  • 2

    Bonjour, super plugin, merci.
    Je souhaiterais personnaliser le contenu de l’email de l’accusé de réception. J’entends une personnalisation propre à l’email et non au message de réponse affiché sur le site.
    C’est possible directement dans le fichier formulaire_accuse.html personnalisé sans avoir à bidouiller dans le plugin même ?

    • Je me réponds à moi-même. C’est déjà le cas ! Le template formulaire_accuse.html est bien le template de l’email. Je me trompé car il y avait une erreur dans le champs de destinataire de la confirmation et j’ai confondu avec le message envoyé en copie lors de la validation du formulaire.
      Merci encore pour ce superbe plugin.

    • Super, c’est parfait :)

      Et au passage tout est expliqué là dans la doc plus haut pour les emails.

      Et comme expliqué, tu peux aussi personnaliser un template *par formulaire*, avec un squelette qui ajoute aussi l’identifiant textuel dans le nom du fichier.

    Répondre à ce message

  • 1

    Bonjour, j’ai un problème de mis en place de formulaire avec Formidable. Je réussi bel et bien construire le formulaire, lui faire appel sur un article. Mais juste après le remplir et envoyer les réponses, il y a un message d’erreur et les questions apparaissent dans le système toutes sans réponses. Comment faire pour corriger ce problème ?

    Amicalement

    • Il faudrait que tu donnes le message d’erreur pour pouvoir te répondre

    Répondre à ce message

  • 1

    Mise en page

    J’ai créé tous les champs mais la mise en page dans mon article est très moche.
    Sur quelle page dois-je intervenir ?
    https://www.essaillon-sederon.net/?Cotisation-ou-don-par-virement

    Merci

    • Bah dans le thème de ton site, tes CSS, le plugin ne s’occupe que de l’aspect fonctionnel. Et d’ailleurs aucun rapport avec les formulaires de ce plugin en particulier, c’est « les formulaires » en général qui doivent être stylés correctement pour ton site public, n’importe quel formulaire.

    Répondre à ce message

  • 9

    Javascript qui cafouille ?

    Bonjour.

    Je fais un formulaire avec des affichages conditionnels. Voir fichier YAML ci-joint (lien valable 7 jours).
    Il y a un champ avec 8 boutons radio. Selon celui qui est coché, cela devrait afficher un des huit autres champs (appelons-les « champs conditionnels »).

    Cela ne fonctionne pas. Les deux premiers champs conditionnels sont bien cachés mais les six autres sont là. Si je coche un des deux premiers radios, le champ correspondant ne s’affiche pas (sauf si je fais F5 !).

    De plus, certains éléments Javascripts de mon site ne fonctionnent plus sur l’article où je place mon formulaire. Exemple : l’onglet « Relecture temporaire ». De même, dans l’espace privé, quand je modifie l’article ou l’enregistre, l’Ajax ne modifie pas la colonne de gauche. Aucun souci, par contre, si je supprime ces affichages conditionnels.

    J’ai testé sur un autre site, c’est pareil. Avec deux navigateurs (Firefox et Vivaldi), c’est pareil. J’ai changé les clés des radios, pareil.

    Est-ce moi qui ai foiré ma syntaxe ou y a-t-il un problème avec le Javascript généré ?
    Si nécessaire, je peux envoyer une sauvegarde de la page html complète (et allégée) de l’article.

    Merci d’avance.

    1138.

    Spip 3.1.8 ; Formidable 3.7.1 ; Saisies 2.24.2 ; API de vérification 1.7.1 ; Bonux 3.4.6.

    • Dans ton troisième champ conditionné (et j’imagine les suivants)
      tu met

      @radio_1@="am0424"

      comme condition d’affichage, alors qu’il faudrait mettre

      @radio_1@=="am0424"
    • Bien vu ! C’était donc ma syntaxe (uniquement sur le 3e).

      Merci et bon week-end. 👍

    • Christophe Noisette

      Bonjour
      j’ai un souci identique.
      J’ai une première question (@checkbox_3@) dont l’intitulé est : « vous »
      et les réponses possibles

      choix1|êtes ou avez été abonné au journal
      choix2|avez acheté un journal à l'unité
      choix3|n'avez jamais acheté le journal 

      j’ai donc ensuite trois « groupes de champs », un pour chaque réponse... J’aimerais que le groupe de champs 1 soit visible quand on fait le choix1, le groupe de champs 2 ... quand on fiat le choix 2.
      J’ai donc conditionné mes groupes de champs de la sorte

      @checkbox_3@=="êtes ou avez été abonné au journal" 
      @checkbox_3@=="avez acheté un journal à l'unité" 
      @checkbox_3@=="n'avez jamais acheté le journal"

      , formule que j’ai placé dans l’ongle ’affichage’ de mon groupe de champs à deux endroits : Affichage conditionnel et Affichage conditionnel lors du remplissage

      Mais quand je vais sur la page qui présente le formulaire, https://www.infogm.org/evaluation-du-journal-bimestriel-inf-ogm, je vois d’emblée les trois groupes de champs...

      Je ne vois pas où j’ai pu commettre une erreur, donc j’en appelle à vos lumières.
      Merci
      Christophe

    • Christophe, tu utilises informatiquement le label humain. La vraie valeur enregistrées, c’est la clé identifiante. Tu mets ce que tu veux, mais toi tu l’as toi même mis dans ton exemple, « choix1 », etc.

    • Christophe Noisette

      merci j’ai donc modifié ma formule mais les groupes de champs restent tous visibles, indépendamment du remplissage de la condition. J’ai vidé le cache et essayé en navigation privée, en vain.

    • Christophe Noisette

      Je me réponds : j’avais copié ma formule dans les deux champs : si_affichage et si_affichage_remplissage... donc ca marche
      Par contre, je ne sais pas la valeur qui est renvoyé par un bouton « oui non » car si je mets

      @oui_non1@=="oui" ou "Oui"

      En fait je ne sais pas la valeur renvoyée par un tel champs.

    • Christophe Noisette

      Je me réponds : j’avais laissé la formule dans les deux champs si_affichage et si_affichage_remplissage
      En virant la formule du deuxième, ça marche.
      Merci

    • 1. Les dernières versions de formidable/saisies suppriment ce double champs qui posaient problème.
      2. Par défaut, oui/non renvoie :
      -  « on » si oui
      -  «  » si non

      Mais tu peux configurer cela. En fait, ce n’est pas vraiment une saisie conseillé, car non accessible. Il vaut mieux avoir des saisies explicites « Oui j’accepte telle condition » « non je refuse telle condition »

    • Christophe Noisette

      Je me réponds encore
      la valeur est « on » sans majuscule... pour oui.. Désolé d’avoir encombré le forum.

    Répondre à ce message

  • 5

    Bonjour et merci pour ce formidable plugin !

    Je souhaite associer des formulaires à certains objets. Le problème un peu bloquant que je rencontre est que la liaison est supprimée dès qu’on modifie l’objet ?

    -  > formidable_post_edition($flux) dans formidable_pipelines.php

    On peut apporter une modification à un objet sans souhaiter supprimer les liaisons ?
    (exemple avec les mots-clés)

    Merci d’avance pour votre retour

    • Je n’ai jamais rencontré ce problème.

    • Véronique CUOMO

      Bonjour Maïeul,

      Tu veux dire par là que lorsque tu associes un formulaire à un objet, la liaison n’est pas supprimée si tu modifies l’objet ?

    • exactement (autrement dit : je n’ai pas rencontré le problème que tu décris)

    • Véronique CUOMO

      Bonjour,

      Je reviens à la charge concernant le problème évoqué : quel que soit l’objet sur lequel je relie un formulaire, la liaison est supprimée dès que je modifie l’objet.

      Si je commente la fonction formidable_post_edition() du fichier formidable_pipelines.php, le problème ne se produit plus.

      A quoi sert ce pipeline ?

      Je suis vraiment très ennuyée par ce problème, merci pour votre aide

    • C’est compliqué puisque je ne reproduis pas le problème. Il faudrait que tu puisse m’envoyer en privé une copie de la base + des plugins installé ainsi que les version PHP/mysql utilisés pour que je puisse essayer de debuguer.

    Répondre à ce message

  • 2

    Salut,

    est-ce quelqu’un à déjà été confronté à des disparitions de champs ?

    Je rencontre ce bug mais je n’arrive pas à bien le cerner : je crée un nouveau formulaire dans lequel j’ajoute un champs bloc de texte par ex. Si je clique sur le bouton Configurer de ce bloc, il disparait (= il est supprimé du formulaire).

    Le truc, c’est que ça ne le fait pas à chaque fois et je n’arrive pas bien à voir dans quelles conditions.

    La config : SPIP 3.1 et Formidable et à jour.

    • Jamais eu ça pour l’instant. N’hésite pas à repréciser si tu trouves un moyen de reproduire à coup sûr (les bugs pas reproductibles, c’est forcément un peu compliqué de faire quoi que ce soit…)

    • Merci pour ton retour.

      Oui, c’est pas pratique !
      Je vais lancer un mail sur la liste pour voir...

    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