Formidable, le générateur de formulaires

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

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 :

  1. #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 :

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

Pré remplir les champs depuis une ancienne réponse

Si les réponses sont enregistrées, on peut passer en troisième argument un identifiant de réponse.

  1. #FORMULAIRE_FORMIDABLE{contact,'',23}

pour modifier la réponse 23.

Champs oui-non et case unique

Pour rendre obligatoire la réponse “oui” à un champ de type oui-non ou 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 :

  1. 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)

updated on 28 November 2019

Discussion

686 discussions

  • 2

    Bonjour.

    Quelqu’un me fait remarquer que, dans un champ date, le sélecteur d’années va de -60 à +40 ans (en 2019, on a donc le choix d’années entre 1959 et 2059).

    Or une telle gamme n’est pas toujours souhaitée (on pourrait ne vouloir que trois années) ni toujours adéquate (pour une date de naissance, pas besoin des années à venir, mais probablement bien de dates en deçà de 1959).

    Ne pourrait-il pas y avoir des options pour jouer sur l’étendue proposée ? On pourrait ainsi mettre de 2020 à 2022, ou de 1919 à aujourd’hui, ou d’aujourd’hui à 2042, etc.

    Peut-être que ça existe déjà, mais je n’ai alors pas trouvé…
    (Et peut-être que ça relève plus de Saisies que de Formidable…)

    Et, tant qu’à faire, ne pourrait-on pas implémenter dans Formidable le champ HTML5

    1. <input type="date" … >

    , qui a le gros avantage de proposer une ergonomie plus adaptée sur appareils mobiles ?
    (OK, il faudrait garder le système actuel en fallback pour les navigateurs qui ne le supportent pas encore, et je crains que ça coince pour Safari, où le type date est reconnu mais où aucun outil de saisie n’est présent.)

    Plus d’infos sur le type date chez Mozilla…

    Merci d’avance pour vos réponses, et bon week-end !

    1138.

    PS : dans la prévisualisation, le texte

    1. <input type="date" … >

    affiche réellement le champ . ;-)

    Reply to this message

  • 1

    Bonsoir
    J’ai un soucis avec le plugin, les onglets de config des champs n’apparaissent plus.
    Je suppose une incompatibilité de plugin.
    Est-ce que vous avez une idée ? Sinon je testerai et vous direz ensuite. Merci
    spip 3.1.10
    Jean-Luc

    Reply to this message

  • 10

    Bonjour à toutes et à tous,
    sous SPIP 3.2.5 [24404]
    avec Formidable 3.45.3
    et Saisies pour formulaires 3.28.11
    Je ne reçois pas l’info par mail lorsqu’un formulaire est rempli en ligne sur mon site, alors qu’il le faisait très bien jusqu’à il y a 1 mois environ, (avant les dernières versions de plugin) et ça c’est arrêté, j’ai donc pensé à voir si il y avait des mises à jour, que je me suis empressé de faire, mais sans plus de résultats !
    Une direction ? J’ai bien les réponses dans mon espace privé, mais pas de mail de confirmation...
    Cordialement, Alain

    • nous recevons toujours les mails de notre coté. Est-ce que ce ne serait pas au niveau de votre serveur qu’il y aurai un problème d’envoi de mail? il faudrait tester l’envoi de mail dans le formulaire de config de facteur. Il faudrait aussi voir le fichier mail.log pour voir s’il signale des problèmes.

    • Bonjour tout le monde,
      Je pense il y a un problème au niveau de la notification après la mise a jour du plugin. Je reçois un mail sur deux, j’ai fixé deux adresses email séparés par une virgule mais cela ne marche pas et j’avais pas ce problème avant la mise a jour !!!
      #FORMULAIRE_FORMIDABLE{2, #ARRAY{adresse1@gmail.com, adresse2@gmail.com}}
      Est ce que ce bout de code peut marcher dans une squelette ? Pour ma part adress1 et adress2 ne reçoivent pas de notification. Merci de votre aide

    • @Manou je ne vois pas comment ton truc aurait pu marcher un jour, cf la documentation de la balise juste là au-dessus. Le deuxième paramètre est un tableau pour préremplir les valeurs des champs suivant leur nom, ce qui n’a rien à voir avec ce que tu y mets là.

    • No no excuses moi, je comprends pour cette balise, je l’utilise pour récupérer des valeurs....Mais au niveau de la configuration des traitements > Destinataires supplémentaires
      si je mets une seule adresse on reçoit le mail, par contre si je mets deux adresses séparés par une virgule les deux adresses ne reçoivent pas de mail et je rencontre ce problème depuis la mise a jour

    • Merci Maïeul pour les directions :
      -  Je n’ai pas reçu les mails de test de facteur avec 2 adresses différentes, ce serait déjà un signe
      -  Je n’ai pas testé comme le dit Manou avec une seule adresse, j’ai une adresse par liste de choix, plus moi en 2ème adresse pour avoir tous les formulaires, je vais tester et je reviens

    • le problème de Manou est autre. Il semble bien que ton souci vienne de l’envoi du mail, et pas de formidable. A voir si ton fournisseur a pas changé des choses.

    • Voici les éléments retrouvés dans les logs :

      [Fri Sep 27 08:26:57 2019] [error] [client 51.68.11.211] [host www.nomdedomaine.eu] AH01797: client denied by server configuration: /homez.607/xxxxxxx/www/config/fichiers/formidable/formulaire_7/test.txt, referer: https://www.nomdedomaine.eu/

      Si ça peut apporter quelque chose ???
      Par avance, merci, Alain

    • dans mail.log ? cela m’étonnerait. Ce n’est pas lié aux mails en tant que tel, ce log.

    • ah mais là c’est les pas les logs de spip. Je parlai bien des logs de spip (dans tmp/logs). Cela étant, les logs apache / php peuvent éventuellement servir aussi.

    • Pour le plugin Facteur, ça ne vient pas de ce plugin,, pas de spip non plus, peut-être OVH l’hébergeur ?

    Reply to this message

  • 4

    Bonsoir,
    Le besoin : avoir un champ texte (avec un lien) commun à tous les formulaires d’un site.

    Je ne sais pas si c’est fait exprès mais dans le champ de type “explication” je n’arrive pas à insérer des liens par exemple en [savoir plus->artxx] vers une explication détaillée.
    Par contre pour un type de champ “ligne de texte” par exemple il est bien possible d’ajouter un lien dans son option explication.

    Toujours à propose de ce champ de type explication, j’ai tenté d’en ajouter un comme champ extra à la table formulaire. Le but étant d’avoir un champ prérempli pour tous les formulaires avec certaines références légales.
    Bon j’ai pas encore fait le tour de la question mais déjà il semblerait que comme le champ “explication” n’a pas de label, il n’est pas ajouté dans la base comme champ extra d’une table.
    Pour l’instant je m’en suis sortie en créant un type de champ extra case à cocher, en mettant mon lien dans son champ texte et en affichant dans mes formulaires formidable uniquement le champ texte via un modèle.

    Mais j’aurais bien voulu trouver une solution transversale unique pour tous les formulaires d’un site (newsletter, auteur, formidable,..) pour afficher un champ texte avec ce que l’on veut dedans.

    • 1) j’arrive parfaitment à insérer un lien dans un explication avec le raccourci standard [->]
      2)ajouter un champ extra dans la table spip_formulairene fera pas afficher le champ extra dans le formulaire (que ce soit une explication ou un autre type de champ). Pour construire les formulaires, formidable se base uniquement sur ce que tu défini comme champ lors de la config du formulaire.
      3) si tu veux une solution transversale pour afficher un texte unique pour TOUS les formulaires le mieux serait de faire cela via le pipeliner formulaire_fonds (ou un truc du genre, je ne me rappelle plus le nom).

    • Bon ben pour moi le raccourci [->artxx] ne fonctionne pas dans le champ “explication”. J’ai essayé sur plusieurs sites sans succès. Mystère. Je joins une capture pour être sure que l’on parle de la même chose.
      Merci pour l’explication pour le champ générique, Je vais potasser https://programmer.spip.net/formulaire_fond

    • Attends là tu montres une capture d’une option explication d’une autre saisie (case par ex) alors qu’à la base tu parlais de la saisie explication autonome elle-même, et tu disais justement que dans une option explication là ça marchait chez toi. Du coup je ne comprends plus de quoi tu parles.

    • Hello,
      Je suis désolée, je n’arrive pas à être claire. Je disais :
      “dans le champ de type « explication » je n’arrive pas à insérer des liens par exemple en savoir plus vers une explication détaillée”
      >> là je parle par exemple d"un champ extra de type “explication” ou du champ explication d’un bloc “newsletter” de Formidable (la capture envoyée)

      “Par contre pour un type de champ « ligne de texte » par exemple il est bien possible d’ajouter un lien dans son option explication.”
      >> oui là c’est bon.

    Reply to this message

  • 1

    Quelques pistes/questions pour faire face aux SPAMs d’un formulaire.

    Est-ce qu’il serait possible dans les traitements de demander à ce qu’un mail de confirmation soit envoyé à la personne qui rempli le formulaire avec un lien de validation (un peu comme les signatures des pétitions de SPIP) ?
    Comme ça, on n’aurait dans la base que les formulaires effectivement validés par mail par un être humain.

    Autre piste : une nouvelle saisie “piège” qui serait une case à cocher avec un texte libre du genre “Ne cochez pas cette case si vous êtes un être humain”.
    Si la case est cochée, alors, on n’enregistre pas le formulaire (et on n’affiche pas d’erreur).

    PS : j’ai bien conscience que c’est moins bien qu’un lien plus fort avec NoSPAM.

    • La saisie “piège” existe deja avec nospam. C’est le mecanisme de base de nospam. sur lequel est branché formidable. pour la validation par mail... pourquoi pas (mais je n’ai pas le temps de coder cela).

    Reply to this message

  • 1

    Sujet : Lien avec NoSPAM ?

    Bonjour,

    Je cherchais à faire comme pour les forums et à signaler qu’un message était un SPAM.
    Et j’ai été surpris de réaliser que ça n’était pas disponible dans l’interface.

    Est-ce qu’il est possible de faire apprendre à SPIP+NoSPAM que certains messages sont des SPAMs ?

    • Non, ce n’est pas prévu. Il faudrait une réécriture de nospam pour qu’il trouve d’autres sources de spam que les forums, pour l’analyse.

    Reply to this message

  • 12

    Bonjour,
    j’ai besoin d’aide, je suis perdu depuis la mise a jour.
    1. Pour la configuration je dois choisir “destinataires en fonction d’un champ”, pour l’ancien y’avait “Destinataire présent dans un des champ des formulaires” et via une liste déroulante on choisit cf PJ
    2. depuis la mise a jour je n’ai plus “Destinataire présent dans un des champ des formulaires” j’ai des cases a coché et même si je coche le champ de mon choix, l’adresse ne reçoit pas le mail.
    3. Je signale que le champ de mon choix est @hidden_1@, je signal aussi que je ne peux pas fixer une adresse parce que tout simplement les emails changent en fonction de l’article ou je me trouve. Mais avec l’ancienne version du plugin j’avais aucun probléme, il fallait juste choisir le champ

    • Le champ “destinataire présent dans un des champs de formulaire” a été supprimé car il permettait à n’importe qui d’envoyer des courriels à n’importe qui rien qu’en remplissant le formulaire, ce qui en faisait un nid à spam.

      Je ne vois pas où vous avez “des cases à cocher”.

      “Destinataires en fonction d’un champ” est à utiliser si vous avez plusieurs choix dans une liste déroulante (par ex “service technique”/ “facturation” / “propriétaire”). Cela ne répondra pas à votre question.

      La solution la plus propre est de choisir votre champ caché dans “Destinataires”, et de mettre, ainsi qu’expliquer, l’identifiant (numéro) d’un auteur du site lorsque vous remplissez ce champ caché. Il ne faut pas mettre un email en clair (ce que vous faisiez apparement avant), car tout adresse email qui apparait en clair sur une page web (y compris dans un champ hidden) peut être récupéré par des robots spammeurs.

    • Bonjour et merci pour la réponse, voici les cases a coché qui est là depuis la mise a jour

    • Bonjour en PJ les cases a coché dont je parle et je l’ai depuis la mise a jour

    • oui, c’est bien cela. Il faut simplement ne pas mettre directement l’email, mais bien le numéro d’auteur dans le champ.

    • Merci pour l’aide que vous m’apportez (j’en ai besoin vraiment), mais je ne comprends toujours pas, si je mets l’identifiant auteur, seul l’auteur reçoit le mail.

      1. Supposons j’ai une liste d’étudiant et chaque étudiant a une ou plusieurs adresses email séparé par une virgule

      2. dans mon formulaire , je crée un champ caché ou j’affecte Email Etudiant @hidden_1@

      3. Ok si je veux q’un auteur reçoit une copie du mail je mettrai l’id auteur et NON écrire directement l’email pour éviter les spams (là je comprends)

      4. Mon problème : Comment configurer le formulaire de sorte que si je me retrouve dans une page étudiant X que l’étudiant X reçoit le mail et l’auteur reçoit une copie du mail, de même que si je me retrouve dans la page de Étudiant Y .......Z ?

      Merci de vos lumiéres

    • Tes explications ne sont vraiment pas claires, en tout cas pour moi. Plutôt que de dire plus ou moins comment tu faisais avant, commence déjà par expliquer clairement ce que tu cherches à faire. À qui tu veux l’envoyer, le formulaire est-il dans un contenu ou un squelette, d’où viennent la ou les adresses de chaque personne, etc ?

    • Bonjour Rasta et Maïeul,
      Merci de bien vouloir m’aidé, je vais essayer d’être plus claire comme vous me l’avez demandé

      1. J’ai crée une nouvelle table “Étudiant” dans la base de donnée via le plugin fabrique auto, il ya un champ dans cette table nommé “Email Etudiant”. ou chaque etudiant peut avoir une ou deux adresses emails séparé par une virgule

      2. dans mon squelette etudiant.html j’appel le formulaire #FORMULAIRE_FORMIDABLE{contact}

      3. si on se retrouve par exemple dans etudiant X (X étant id de étudiant), on rempli le formulaire et on envoie, l’étudiant X doit recevoir le formulaire et moi en tant que rédacteur du site je reçois une copie

      Mon problème : Comment configurer le formulaire de sorte que si je me retrouve dans une page étudiant X que l’étudiant X reçoit le mail et l’auteur reçoit une copie du mail, de même que si je me retrouve dans la page de Étudiant Y .......Z ?

    • Merci, c’est plus clair.

      Le système qui tu avais choisi était vraiment pas terrible
      1) nid à spam car on peut modifier le hidden facilement
      2) révélation du mail des étudiants

      Reste à trouver une solution alternative, facilement configurable.

      Ce que je pourrais voir c’est d’avoir une option, cachée par défaut, permettant de chercher l’email dans un cham quelconque d’une table quelquonce, tout en continuant de passer l’identifiant. Je sais pas ce qu’en pense Rasta?

    • Mof je vois pas comment tu pourrais t’en sortir avec ça et ça serait énormément usine à gaz, alors en plus un truc usine à gaz qui serait caché ?

      Le plugin Contact libre de b_b permet bien cela, en passant en paramètre les adresses qu’on veut, mais c’est dans les params du formulaire donc, ça passe pas dans un des champs ensuite. Donc il faudrait pouvoir passer des options libres (un tableau arbitraire ?) qui ensuite peut être utilisé par tel traitement, tel sous plugin ou peu importe. Un 4ème argument ?

    • caché par défaut dans ma tête = une case à cocher pour pouvoir voir l’endroit où définir la table et le champ.

      Le tableau libre pourrait être une solution, mais faudrait le documenter (alors que je trouve que l’interface à cet interet d’être quasi auto documente).

    • @maieul non mais c’est la fonctionnalité elle-même qui est une usine à gaz et je vois même pas ce que voudrait dire “choisir une table et un champ”, à quel moment tu sais de quelle ligne de l’objet il s’agit enfin ça va faire une énorme machinerie incompréhensible (pour 2 personnes au monde), non vraiment faut surtout pas mettre un truc comme ça dans le plugin. :D

    • mouais, tu as sans doute raison. Reste à trouver un mode de documentation de ce tableau d’options.

    Reply to this message

  • 2

    Bonjour
    Sur un vieux Spip 2.1.30 et Fomidable 0.9.2

    Je souhaiterais qu’après la validation des formulaires, le retour se fasse non pas en haut de la page de l’article, mais en haut du formulaire : ce qui permet alors de lire directement le message de réussite ou le message d’échec,
    Avec ma vieille version de Formidable, ça ne semble pas possible. Est-ce qu’avec une version plus récente c’est faisable.

    Merci d’avance

    • C’est intégré nativement dans la version de formidable que j’utilise.

      Dans tous les cas, je conseillerai fortement de mettre à joru spip. Les version 2.x ne sont plus maintenues depuis longtemps, et c’est un coup à avoir une faille de sécu qui traine, donc un potentiel piratage.

    • Merci de cette réponse à laquelle je m’attendais un peu et qui confirme effectivement la nécessité de mettre à jour ce site.
      Un peu de cambouis sur les mains en perspective : c’est un squelette artisanal qui ne respecte pas vraiment les standards...

    Reply to this message

  • 1

    Export Excel : la colonne adresse IP est vide. Est-ce que c’est normal ?
    Ça me semble un bug.

    • il me semble qu’il y a une option dans les préf de formidable, cochée par défaut, qui demande à ne pas exporter les ip

    Reply to this message

  • 1

    Om me signale un bug difficilement comprehensible et reproductible. Un utilisateur se plaint régulièrement que lorsqu’il insère un lien [texte->lien], il perd les saisies entrées (et est obligé de reprendre depuis une sauvegarde yaml).

    J’avoue ne pas voir d’où cela pourrait venir. Une piste Rasta?

    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