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)

updated on 5 April 2020

Discussion

732 discussions

  • 7

    Bonjour, j’ai un problème sur un site en prod avec un bon traffic, le formulaire d’envoie ne marche pas : pas de réponse en backoffice, ni dans le dossier config/fichiers/formidable, pas de traces suspectes dans le log non plus… Je ne sais pas comment le debugger.
    (avant cela marchait avec “formuaires et tables”, mais un autre problème nous à pousser à changer pour celui-ci)

    Le spip est en : 3.0.19 (impossible à mettre à jour malheureusement pour cause d’incompatibilité des plugins actuels abandonnés).

    Et donc la version utilisée de formidable est là : 2.15.11 - stable

    Savez-vous comment je pourrais débugger ce problème ?

    Merci !

    • Hum, la version de formidable n’est plus maintenu, ni la version de SPIP. Du coup difficile pour nous de se motiver à investiguer le problème...

      mais faudrait deja voir si la structure de table spip_formulaire est bien là. Et regarder si formidable.log recoit bien les choses...

      mais bon, maintenir un spip 3.0 c’est un peu un trou de sécurité. Le mieux serait plutot de prendre du temps pour voir quels sont les plugins qui ne sont plus maintenu et voir si on peut les adapter.

    • Bonjour… oui je comprends bien…

      spip_formulaire n’existe pas, mais spip_formulaires existe bien.
      avec liens, réponses et réponses champs.

      Et formidable_post.log reçoit bien des données du genre :

      2020-09-11 08:42:06 82.64.176.84 (pid 128362) :Pub:!INFO: {"id_rubrique":9,"id_article":1023,"id_formulaire":20,"page":"article","formulaire_action":"formidable","formulaire_action_args":"6oS08fd8YVzNYLIfgeMjyjPWXc5mgPf0CoiDGBBpa0C8E8tMhYgpYu4Og+uBXPce\/1FxeRCnBjVOFVsWMt\/Lq3tk3Qju3dofe0tQDUKeHIlXKljZ6hqnmPQ0eEDP","formidable_afficher_apres":"formulaire","_jeton":"18f697cd109a06d2089e3b72bbdca42da5250157","email_nobot":"","mechantrobot":""}

      mais pas de message d’erreur à priori

    • bon, donc la table est là.

      Mais juste pour être sur, tu a bien configuré l’enregistrement des réponses dans ton formulaire ?

    • Oui l’option : Enregistrer les résultats : Enregistre les résultats du formulaire dans la base de données est bien activée. (aucun fichier dans les réponses sous spip, ni sur le ftp, d’ailleurs le dossier d’upload, n’as pas été créé tout seul, j’ai du le faire à la main, c’est peut-être un indice? )

    • le dossier d’upload ca n’existe que depuis la version 3.0.0 du plugin :) donc normal qu’une version 2.0 ne le cree pas.

    • autrement dit : pour avoir une version de formidable qui gère l’envoie de fichier, il faut au moins la 3.0

    • Ok… effectivement… merci pour les infos !

    Reply to this message

  • 4

    Bonjour,

    Je cherche à personnaliser le mail au destinataires en surchargeant formulaire_IDENTIFIANT_email.html afin d’y ajouter le texte personnalisé de l’accusé de réception.
    J’ai essayé :
    -  comme dans notifications/formulaire_accuse.html mais mail vide

    [(#ENV*{message_retour}|propre)]


    -  la fonction affiche_resume_reponse mais les labels sur 2 niveaux ( listex de choix : select ou checkbox) ne sont pas traités

    [(#ID_FORMULAIRES_REPONSE|affiche_resume_reponse{#ID_FORMULAIRE,[(#ENV*{traitements}|table_valeur{email}|table_valeur{texte_accuse})]})]


    -  et la fonction formidable_raccourcis_arobases_2_valeurs_champs mais comme la précédente les labels sur 2 niveaux ne sont pas traités

    [(#ENV*{traitements}|table_valeur{email}|table_valeur{texte_accuse}|formidable_raccourcis_arobases_2_valeurs_champs{#ENV*{saisies},true,''}|propre)]

    Je ne sais pas si j’ai été très clair dans ma question...
    Mais un peu d’aide serait bienvenue.

    Merci d’avance

    • Pour l’accueil quand ça construit message_retour, c’est FALSE en troisième argument de ormidable_raccourcis_arobases_2_valeurs_champs()

      Pour l’accusé tu as bien les “labels à 2 niveaux” (je ne sais pas ce que ça veut dire) et c’est que pour ton essai que ça marche pas ? Ou bien c’est tout le temps pour cette fonction et donc que tu fais est bon et faut corriger un truc de toute façon (et dans ce cas faire un ticket) ?

    • J’ai fais le test avec un formulaire simple avec une seule liste déroulante :
      @selection_1@
      choix1|Un
      choix2|Deux
      choix3|Trois
      et un destinataire pour l’AR.

      J’ai personnalisé le retour en indiquant dans texte_accuse : test email : @selection_1@
      et j’ai copié notifications/formulaire_accuse.html du plugin dans formulaire_test_accuse.html et formulaire_test_email.html.
      Retour :
      formulaire_test_accuse.html me renvoi la valeur : test email : Un OK
      formulaire_test_email ne renvoi rien.

      C’est donc un bug à mon avis que je pensais contourner en utilisant directement les fonctions affiche_resume reponse ou formidable_raccourcis_arobases_2_valeurs_champs mais je ne suis arrivé à rien de concluant.

      merci

    • Ça n’a aucun rapport avec ma question, puisque je parlais spécifiquement de ton utilisation de ormidable_raccourcis_arobases_2_valeurs_champs(), que tu n’utilises donc pas dans ton dernier test. C’est cette fonction qui fait les remplacements, c’est à toi de l’utiliser. Et donc je demandais si elle faisait ce qu’il fallait.

      #ENV*message_retour c’est pas une valeur qui arrive comme ça, c’est construit en amont dans le PHP pour l’accusé seulement. Donc tenter de le réutiliser dans l’autre (le squelette pour les destinataires principaux) alors que cette variable n’existe pas ne va rien donner, forcément.

      Mais peut-être qu’il faudrait plus simplement ajouter une config d’un texte d’intro personnalisé, dédié aux destinataires, tout comme il y en a un pour l’accusé.

    • Bon ba de répondre à côté, ça m’a permis de comprendre le problème que tu avais bien identifié dans ta première réponse...

      La fonction formidable_raccourcis_arobases_2_valeurs_champs() a besoin d’une chaîne vide en 3ème argument ou pas de 3ème argument du tout : et j’avais mis false qui était considéré comme true...

      Merci pour l’aide.

    Reply to this message

  • 7

    Bonjour,
    sur des formulaires existants et intégrés, quand je re-“Configure les champs”, une fois ma modif faite, quand je clique sur “enregistrer” en bas, j’ai le message d’erreur en PJ et ma modification n’est pas prise en compte, je dois refaire une 2eme fois la même manipulation pour que cela soit accepté (vert). Je ne trouve pas cela très normal : quel en serait la source ?
    merci !

    • Hum,

      quelles version du plugin formidable / du plugin saisies ? C’est un bug que je n’ai normalement corrigé, mais apparement il persiste chez certaines personnes.

      Reproduit tu le bug après avoir vidée entièrement tmp/sessions ?

    • J’ai reproduit le bug en vidant entièrement tmp/sessions avec Formidable 4.5.2 et saisies pour formulaires 3.42.1 au moment du bug, mais je vois une nouvelle mise à jour de ce dernier en 3.42.2,faite, je vide le cache et tmp/sessions et le bug est toujours présent malheureusement. Un log à fournir ?

    • non, malheureusement pas de log directement à fournir, car j’ai pas encore placé de log.

      Par contre je veux bien que tu me décrive précisement chaque étape. Et que tu tu m’envoie un export yaml du formulaire.

    • yaml et vidéo écran en message privé. merci d’avance.

    • Merci pour l’envoi.

      Peux tu tester en installant manuellement cette version du plugin https://git.spip.net/spip-contrib-extensions/formidable/archive/bug_prx.zip

      cela devrait résoudre le problème. Si tel est le cas, je publierai dans la foulée.

    • Merci Maïeul, cela marche bien à présent , super ! Voici l’écran après enregistrement

    • Cool, je publie donc !

    Reply to this message

  • 2

    Hello

    On me demande construire un formulaire un peu spécial.
    L’idée est que l’utilisateur remplit un premier champ et dès que ce champ est rempli les autres champs se remplissent automatiquement à partir d’un tableau CSV (si la première valeur est trouvée dans le tableau, bien sur).

    Ensuite il modifie les valeurs inexactes ou pas, il indique s’il a fait des modifs et il valide.

    Le but est de faire vérifier des infos de contact.

    Possible ou pas ? Le problème est de récupérer la valeur par défaut dans le fichier CSV.

    • Bonjour Jean Christophe.

      Oui, c’est possible, en passant par une saisie input personnalisée qui peuplerait les champs voisins avec un bout de javascript.
      Tu as un exemple fonctionnel dans le plugin FFE data, qui récupère les infos depuis un webservice pour faciliter l’inscription.
      Dans ton cas, il faut adapter pour boucler sur le CSV. Et la saisie suppose également que les champs voisins aient un nom attendu.

      Enfin, pour que la saisie perso soit manipulable depuis formidable, il faut créer un fichier .yaml de description dans le même dossier que la saisie.

    • Merci pour la réponse et pour cette piste de travail. On va regarder ça de près avec ma collègue plus à l’aise avec php que moi (ce qui est facile ;-) ).

    Reply to this message

  • 1

    Bonjour

    J’ai créé un formulaire ficheprojet et j’ai configuré :
    -  Modifiable : Les visiteurs peuvent modifier leurs réponses après coup.
    -  Identification des réponses : par cookie

    Et cela fonctionne bien. Si je retourne sur mon formulaire plus tard, les données sont toujours là.

    Ensuite, j’ai dupliqué ce formulaire en ficheprojet_2, ficheprojet_3, ficheprojet_4, ficheprojet_5, avec exactement la même configuration.

    Si je remplis un de ces formulaires, et si je reviens dessus juste après, les données ne sont PAS conservées, tout est perdu. Alors que cela fonctionne bien avec le 1er formulaire.

    Est-ce un BUG ou un problème de configuration ?
    MERCI pur votre aide.

    Reply to this message

  • 3

    Bonjour,
    Je suis en train de configurer un question/sondage en utilisant le plugin.

    Je n’arrive pas à mettre un affichage conditionnel sur un groupe sur la première question et du coup je préfère poster ma question.
    la conf est la suivante :

    @fieldset_1@
        Question 1
    
    @oui_non_1@
        Avez été contraint de travailler à votre domicile
    
    @checkbox_1@
        Si Oui pouvez-vous préciser ?
    
    Liste des choix possibles
    
        choix1|toute la durée du confinement
        choix2|une partie seulement
    
    Sur @checkbox_1@ j'ai mis dans l'onglet affichage :
    @oui_non_1@=="Oui"

    et par défaut le @oui_non_1@ est positionné à “oui”, d’ailleurs qu’ils soit positionné à ou ou non cela ne change rien et que je mette “Oui” ou “oui” dans la condition ne change rien.
    Faut-’il configurer autre chose dans la zone privé du plugin. Pour info je suis sous SPIP 3.2.7
    Merci

    • La saisie oui_non produit “on” ou “” (chaine vide) comme vraie valeure ,c’est évidement pas le label humain qu’on teste (et qui peut changer suivant les langues), comme pour n’importe quelle autre saisie, on teste la vraie valeur technique.

      Mais cela dit, je ne vois même pas comment tu peux avoir la saisie oui_non alors qu’elle est dépréciée et n’est plus proposée.

    • Quelle version de formidabel et de saisies? la saisie oui_non est obsolète, il lui faut préferer des saisies avec des textes explicites, pour des questions d’accessibilité. Du type “oui j’ai été contraint” et “Non je n’ai pas été contraint”

      Ensuite j’imagine que vous parliez bien de l’onglet “affichage selon un champ” ?

      Enfin, même si vous gardez oui/non (ce que je déconseille) il se trouve que la valeur a testé est un peu piégeuse. Il faut tester @oui_non_1@=='on'

    • Merci
      effectivement passer avec un contrôle du champs par “on” ou “” marche parfaitement.
      Bonne journée à vous

    Reply to this message

  • 1

    Bonjour,

    Mes formulaires s’affichent bien dans spip, pas de soucis, par contre ils ne s’affichent pas dans les squelettes. Auriez une idée ?

    Merci

    Reply to this message

  • 3

    Bonjour,
    Merci pour ce formulaire que je trouve parfait.
    Par contre, pensez-vous qu’il serait possible qu’une réponse postée pourrait être exporter directement dans un nouvel article spip. Cela éviterait de ressaisir chaque champs dans l’article.
    Si c’est possible, j’avoue que je n’ai pas trouver comment faire dans par exemple : configurer les traitements.
    Merci de votre aide.
    Pour la petite histoire sur mon site https://www.edition999.info/Formulaire-d-envoi-de-votre-livre.html les auteurs postent un formulaire pour leur livre et ensuite je crée un article qui met à disposition ce live gratuitement.

    • Ce serait compliqué car selon la structure du formulaire, la structure de l’article devrait s’adapter. Donc sûrement pas en natif. À la rigueur dans un plugin à part, avec un nouveau traitement,

      Mais sinon c’est possible de

      1) créer son propre modèle à appeler dans l’article https://www.spip.net/fr_article3454.html
      2) ce modèle utilisera les boucles et balises de formidable https://contrib.spip.net/Balises-et-boucles-avec-Formidable
      3) il faudra aussi ajuster les traiements pour que les réponses soient publiques

      Cela étant je me demande si dans votre cas vous n’auriez pas meilleur temps d’utiliser le plugin “Fabrique” pour créer un nouveel objet “critique de livre”.

    • Cela dit il y a un sous-plugin FormiTable, qui ajoute justement un traitement pour que la réponse soit transférer dans un objet SPIP à configurer dans le traitement (plugin de JLuc mais qui était expérimental). Il n’a pas l’air d’avoir été importé dans le git.

    • Merci beaucoup je vais regarder ces possibilités.
      Je me rappelle, voici plusieurs années, j’utilisais le plugin Forms et Tables et celui-ci permettait en appuyant de mémoire sur exporter, dans l’espace privé, d’ouvrir un nouvel article et que certains champs étaient déjà pré-rempli.
      Mais parfois ma mémoire peut me faire défaut.
      Merci encore et je reviendrai vers vous si je trouve une possibilité facile à mettre en oeuvre, cela pourrait peut-être aider des utilisateurs de Spip.

    Reply to this message

  • 1

    Bonjour,

    merci pour votre plugin qui rend bien des services. Toutefois, il a quelque chose que je n’arrive pas à faire.
    je cherche à savoir comment récupérer une variable depuis l’url pour l’injecter dans le formulaire saisie en contenu. Je m’explique :

    j’ai un article 32 qui contient dans le texte :
    <formulaire|formidable|id=contact|defaut=destinataire,4>
    c’est-à-dire que le destinataire par défaut est le 4

    lorsque je clic sur spip.php?article32&destinataire=10
    je voudrais que le destinataire soit 10 et pas 4

    Est-ce possible,et si oui, comment faire ?
    Merci.

    • Tu ne peux pas logiquement faire ça depuis le texte d’un contenu SPIP, puisque tu n’as pas accès à l’environnement technique de la page. Pour faire ça c’est uniquement quand tu es dans un squelette, comme expliqué plus haut dans la doc de l’insertion squelette qui contient précisément un exemple de ce dont tu parles, qui utilise une valeur dynamique disponible là où on est en train d’insérer le formulaire

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

    Reply to this message

  • 1

    Salut,
    je rencontre un bug pour un formulaire dont le résultat est posté par courriel :
    Quand je coche dans les configurations des traitements “Masquer les liens d’administration dans le courriel” l’envoi de mail ne se fait pas.
    Voila pour le petit report. Si non tout est nickel, merci.
    à+
    joz

    • Salut,

      je viens de tester et je ne reproduit pas. J’ai reregarder le code correspondant, et je vois vraiment pas ce qui pourrait bloquer à ce niveau là...

      version du plugin, de saisies etr de php ?

    Reply to this message

Ajouter un commentaire

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