Formidable, le générateur de formulaires

Un générateur de formulaires facilement configurable pour les non-informaticien·ne·s 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 :

#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}}

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.

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

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

765 discussions

  • 4

    Bonjour,

    Je cherche une solution pour recevoir en ligne des informations émises par des logiciels libres que je développe : ils contiennent un petit tracker pour que je puisse compter les utilisateurs (avec un avertissement tout bien komilfo).

    Jusqu’à cet été, on m’avait fait un truc avec un formulaire de chez l’Ooggle, ça ne me plaisait pas beaucoup. Une commande GET déclenchait une “réponse sur le formulaire” que je pouvais ensuite retrouver dans un tableur en ligne. Mais maintenant ça ne marche même plus.

    A l’April on m’a suggéré de regarder ce qu’il y a comme plugins dans Spip, que je connais bien, qui pourraient m’aider.

    Ma question : en passant par Formidable, puis-je faire remplir automatiquement le formulaire par le même type de commande incluse dans le code de mon application, de manière transparente pour l’utilisateur ? N’est-ce pas inutilement compliqué, il existe peut-être un moyen d’inscrire directement des trucs dans ma base de données ? Mais alors, par un plugin, parce que moi programmer du PHP toussa, c’est pas dans mes compétences...

    Merci de vos avis,

    • Alors, j’ai relu deux fois, mais désolé pour le moment… je n’ai absolument rien compris à ce que tu cherches à faire ! :D

      Je ne comprends déjà pas “une solution pour recevoir en ligne des informations émises par des logiciels libres que je développe”

    • L’intendant zonard

      Hello, pour tenter d’être clair :
      1- dans mon logiciel il y a un tracker
      2- il consiste en une ligne GET envoyée à un OoggleForm, qui au final ajoute une ligne à un tableur
      3- Formidable peut-il recevoir une commande équivalente ?
      4- Ai-je vraiment besoin d’un formulaire, dans le fond tout simplement envoyer en direct une ligne à ma base de données Spip ? Avec quel plugin ?

    • Que ce soit en GET ou en POST, un formulaire n’est déclenché que par son bouton, pas en appelant une URL. Dans le GET de l’URL on peut parfois donner des infos pour préremplir les champs du formulaire mais ça ne l’envoie pas, ça ne le déclenche pas. Et dans tous les cas, les formulaires Formidable sont toujours postés en POST.

      Ton besoin a plutôt l’air d’être une sorte d’API, où quand on requête sur telle URL ça enregistre en BDD. Mais bon pour ça faut un truc un peu sécurisé (avoir une clé d’API ou demander à fournir email/mdp aussi lors de la requête pour être connecté) parce que sinon n’importe qui pourrait remplir la base à l’infini sans aucune autorisation spéciale.

      Il n’y a pas de trucs totalement clé en main pour ça il me semble, c’est trop spécifique. Mais ça va pas se faire avec des formulaires qui sont en POST et qui ne s’activent que par leur bouton submit.

    • L’intendant zonard

      Merci pour cette réponse très claire ! Effectivement le problème c’est de ne pas laisser un trou béant dans la base de données...

    Reply to this message

  • 2

    Bonjour,

    Je souhaitais savoir comment limiter le nombre de réponses par personne et par jour.
    En vérifiant l’unicité sur le champ “email” il est simple de limiter a une réponse par adresse, mais je souhaiterais permettre la soumission d’une nouvelle réponse le lendemain.

    Est-ce que quelqu’un aurait une piste svp ?

    • Cette fonctionnalité n’existe pas en tant que configuration. Si tu sais ou que tu connais quelqu’un qui sait coder en PHP, une vérification pourrait être ajoutée (en s’insérer dans le pipeline “formulaire_verifier” pour ce form précis). Mais ya rien de tout cuit.

    • Parfait, merci bcp pour ce retour.

    Reply to this message

  • 1

    Bonjour.

    Je voudrais savoir s’il est possible avec formidable de rappeler ou d’utiliser dans une question la valeur d’une précédente réponse.
    Exemple:

    • Choisissez l’une de ses réponses:
      • ( ) 1
      • (·) 2
      • ( ) 3
        […]
    • Rappel: lors d’une question précédente, vous avez répondu 2.

    Si oui, j’aimerai savoir s’il est également possible de manipuler les réponses précédentes pour créer et afficher des nouvelles valeurs issues de ses réponses précédentes.
    Exemple:

    • Question 1
      • ( ) 1
      • ( ) 2
      • (·) 3
        -  * Question 2
      • ( ) 2
      • (·) 4
      • ( ) 6
    • Question 3
      • Vous avez répondu 3 et 4. Si on multiplie ces deux nombre, on obtient 12.

    Merci pour votre réponse.

    • La réponse est non. Mais tu peux afficher certaines saisies en fonction des choix sur les précédentes saisies.

    Reply to this message

  • 1

    Bonjour,
    Je ne sais pas si le plugin formidable peut répondre à ma demande mais il est tellement capable de chose : j’explique. Je souhaiterai afficher dans un article, un formulaire (avec un seul champ menu déroulant) qui en fonction du choix réaliser et la validation renvoie vers une URL définie
    choix 1 —> URL1
    choix2 —> URL 2
    Est-ce possible?
    Merci d’avance pour votre aide et réponse
    Cordialement
    Jérôme

    Reply to this message

  • 1

    Bonjour,
    Pour la version 4.15.2
    La définition des numéros de version des dépendances me paraissent étranges, les braquets fermantes sont à l’envers:

    <necessite compatibilite="[3.3.8;[" nom="spip_bonux"/>
           <necessite compatibilite="[3.53.3;3.*.*]" nom="saisies"/>
    <necessite compatibilite="[1.12.0;[" nom="verifier"/>
    <necessite compatibilite="[1.5.2;[" nom="yaml"/>
    <necessite compatibilite="[3.6.2;[" nom="facteur"/>
    <necessite compatibilite="[1.6.1;[" nom="nospam"/>
    <utilise compatibilite="[1.5.0;[" nom="collectionjson"/>
    <utilise compatibilite="[1.23.3;[" nom="cvtupload"/>
    <utilise compatibilite="[3.1.0;[" nom="corbeille"/>

    Cela résulte en une mise à jour impossible vers la 4.15.2 car impossible de mettre à jour la dépendance ...

    Reply to this message

  • 1
    Etienne J

    Bonjour,

    Petit signalement de bogue migratoire spip 4 (je fais quelques tests). Lors de l’ouverture des formulaires dans l’espace d’administration sous spip 4, l’erreur en capture d’écran jointe apparait.

    Numéro Message squelette boucle Ligne
    1 Aucun squelette saisies/listes_diffusion n’est disponible... ../plugins/auto/saisies/v4.0.2/saisies/_base.html / 0

    Amicalement.

    • c’est que tu a du mettre une saisie “liste de diffusion” et que entre temps le plugin mailsubscriber qui la fournie a été desactivé.

    Reply to this message

  • 1
    Etienne J

    Autre signalement (je ne sais pas si c’est propre à l’extension Formidable ou plus généralement étendu à spip 4) :
    Les dépendances entre les extensions Formidable et Facteur ne sont pas automatisées, c’est à dire que l’installation de Formidable n’embarque pas celle de Facteur.
    Aussi, Facteur n’est pas référencé dans les extensions compatibles, il faut aller en chercher le lien manuellement.

    • heu... facteur étant marqué comme compatible spip 4, j’aurais tendance à penser que le souci vient plus de svp le gestionnaire de paquet qui n’a pas mis à jour automatiquement facteur.

    Reply to this message

  • 5

    Bonjour ,
    ma question est sur l’utilisation d’un champ conditionnel dont l’affichage dépend de la valeur d’un champ radio ’radio_1’.
    SPIP 3.2.11 [24473] , Formidable 4.15.2 - stable , Saisies pour formulaires 3.54.7 - stable
    j’ai mis dans “Affichage conditionnel” de mon champ conditionné la valeur : @radio_1@==“prix” , et “Uniquement lors du remplissage” est décoché.
    Quand j’affiche le formulaire et je coche “prix” : rien ne se passe .
    Ce qui m’intrigue , c’est dans le code source de la page, il y a :

    <div class="choix choix_prix">
    		<input type="radio" name='x_K1UwTm16RnkwRjVJb1E9PQ' class="radio"    required="required" id="champ_radio_1_3" value="prix" aria-describedby="explication_radio_1" />
    		<label for="champ_radio_1_3">un devis, un prix</label>
    	</div>

    on y retrouve bien “prix” mais “champ_radio_1_3” comme ID

    bien entendu le YAml peut vous être envoyé.
    merci d’avance .

    • C’est parcr que tu as activé l’option encrypt de nospam (via une constante) qui n’est pas compatible avec les afficher_si (ou reciproquement).

    • effectivement, je comprends. Merci bien.

    • je dirais quand même “dommage” car nospam n’est plus une option à présent.

    • bah oui mais l’encryption ci.

      J’ai une piste pour rendre compatible, mais faut des modifs dans nospam, et j’attend un retour de son auteur (pas mal pris ses derniers temps)

    • ah oui l’“Obfusquer les name” , effectivement j’ai du mettre cela car les spammeurs aiment trop mes formulaires visiblement - il y aussi le multilangue dedans mais cela n’a pas d’impact- je pourrais tester en version bêta si vous voulez. - merci d’avance.

    Reply to this message

  • 8

    Bonjour

    J’ai configuré le formulaire pour que le résultat me soit envoyé en y intégrant les fichiers téléversés. Si la taille max est dépassée, un lien est inséré à la place. OK.
    J’ai programmé dans connect.php pour que le lien soit valide 10j.

    J’ai reçu une réponse, il y a 3 jours, Quand je clique, cela ouvre une page de mon site avec le message : formidable_recuperer_fichier_par_email : Accès interdit
    Je suis pourtant bien connecté et webmaster.

    • dans connect.php? normalement c’est mes_options.php

      une possibilité est que le lien soit coupé par le lecteur de mail.

      Il faudrait me transférer le mail en privé pour que je vois ce qu’il en est.
      En tout cas comme cela je n’ai pas d’outil explicatif.

    • Message privé envoyé.

    • Pour mémoire : on suspecte une interaction avec le plugin spip_thelia et son authentification unique.

    • J’ai le même problème.
      Le doc joint est récupérable dans l’admin du site dans la réponse au formulaire mais pas par le lien du mail qui est :

      Formulaire “Fête 2019” posté le 18/06/2019 à 15:45:58.

      Fichier(s) : [Lien expirant dans 15j 0h 0min 0s] received_345391132790639.jpg (JPG - 24 ko) 
      https://www.site.fr/spip.php?action=formidable_recuperer_fichier_par_email&arg=a:4:%7bs:10:%22formulaire%22;s:1:%227%22;s:7:%22reponse%22;s:3:%22792%22;s:7:%22fichier%22;s:28:%22received_345391132790639.jpg%22;s:6:%22saisie%22;s:10:%22fichiers_1%22;%7d&hash=6b836b1cbfd35667a93c01b52bcc3eae924a9291

      message erreur sur le lien : “formidable_recuperer_fichier_par_email : Accès interdit” (je suis webmestre mais pour les autres admins c’est pareil)

      Il n’y a pas de Thélia sur le site

      Merci

    • difficile de dire comme cela. il faudrait voir les logs et autres...

    • Alors dans formidable_post.log j’ai ça qui correspond à la saisie par l’utilisateur :
      2019-06-18 15:45:57 92.167.184.55 (pid 6423) :Pub:!INFO: {"post":{"page":"evenement","id_evenement":2996,"formulaire_action":"formidable","formulaire_action_args":"QWb1uO1UbmAjZ6nluD2Y3fbJM0V2l0mXAs9\/ovHs6WtMAzuQyHyP26v\/mUlPWjTNm+Cg3GRRkwyyAtKrogE36JYK","id_formulaire":7,"formidable_afficher_apres":"rien","_jeton":"0e703f7a51fc46906d31ae7ef302ba068c9e9c07","input_1":"LC ","input_2":"G'h ","email_nobot":"","textarea_1":"56 rue","email_1":"ndy@hotmil.fr","mechantrobot":""},"files":{"fichiers_1":{"name":["received_345391132790639.jpg"],"type":["image\/jpeg"],"tmp_name":["\/home\/site\/www\/tmp\/cvtupload\/formidable_NmIrJ9.jpg"],"error":[0],"size":[24526]}}}

      S’il y a d’autres fichiers log sur le serveur pour l’erreur de lien dans l’email je n’y ai peut-être pas accès.

      Merci

    • Bonjour,

      J’ai actuellement le même soucis sur un formulaire :
      formidable_recuperer_fichier_par_email : Accès interdit

      Le délai est fixé à 15 jours dans le fichier mes_options.php :
      define(’_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL’, 1296000);

      J’utilise actuellement formidable en version 4.7.1

      Avez-vous pu résoudre le problème ?

      Cordialement,

    • Il y a quelques temps j’ai fait une partie des correctifs. Mettez deja à jour. A noter que les liens ne seront valide que pour les nouveaux emails.

      On m’a cependant signalé une piste potentielle d’un autre bug, mais il serait intéressant de tester cela : un delain long + attendre au moins 12 h avant de tester sur ce lien. Pas trop le temps de debuguer cependant en ce moment.

    Reply to this message

  • 1

    Bonjour, existe-t-il un plugin qui permettrait d’intégrer le contenu des réponses à un formulaire à salesforce ou équivalent ?

    • Aucune idée, ça sort du cadre de ce plugin en tout cas, mais je n’ai pas vent d’un sous-plugin qui permettrait ça de manière automatique. Dans tous les cas les réponses sont exportables en format standard tableur CSV, donc importables ensuite ailleurs.

    Reply to this message

Add a comment

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 / PostgreSQL
  • 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 apparait.

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.

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