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

  • 6

    Bonjour,
    J’ai un petit soucis sur le traitement.
    Dans l’email d’envoi aux destinataires, j’ai l’affichage dans l’objet du mail du nom du champ au lieu de sa valeur ex :

    Guarantee Registration choix7

    au lieu de

    Guarantee Registration my best product

    , il me semble que cela fonctionnait avant , je suis en 1.9.4.

    Je crois que cela a déjà été posé comme question : y ’ a t il moyen de faire disparaître ce #@ ! de (no data entered) et le titre correspondant.

    • C’est bizarre. Qu’y a-t-il dans ta configuration du champ « sujet » pour le traitement « Envoyer par email » ?

      Je n’ai pas compris le passage sur « (no data entered) ». Si tu parles des champs sans réponse en français, par défaut il n’y a pas d’option pour ça, mais toutes ces réponses sont entourées d’un bloc avec une classe « sans_reponse ». Tu dois donc pouvoir surcharger le squelette du mail, en laissant le code actuel mais en ajoutant une définition de styles .sans_reponse{ display:none; }.

    • Delaney

      Bonjour RastaPopoulos et merci pour ce plugin très très utile !

      Je crois rencontrer le même problème que Jacot.
      Le champ « sujet » de mon formulaire est une liste de choix et dans le mail c’est la clé et non la valeur qui est transmise.
      Pour la configuration du champ « sujet » j’ai utilisé l’aide mémoire, soit en l’espèce @selection_1@.

      J’ignore si c’est une erreur de paramétrage de ma part, mais en tous cas ce n’est pas trop pénalisant car par contre dans le corps du message le champ « sujet » est bien accompagné de sa valeur.

      Merci par avance.

    • Ah ok j’ai pigé donc, c’est pas le « nom du champ » mais la valeur de la clé au lieu du label humain. C’est fort probable qu’il y ait un « bug » de ce côté là car jamais apparu auparavant (j’ai toujours utilisé des input libre pour générer le sujet, jamais des listes avec choix). Donc ouais il y a un truc à corriger pour ça.

    • oui, c’est cela, j’avais exprimé un peu rapidement le problème.

      Pour le sans réponse =no data entered, merci pour la réponse ;-)

    • julien schwartz

      No stress ! Le plugin est une tuerie, il me permet de laisser mes clients paramétrer leur formulaire de contact sans connaître un traître mot de html ! Merci encore pour ça.

    • benolaos

      Bonjour,

      En relation avec ce sujet je cherchais à retirer l’affichage, dans l’email envoyé, des champs laissés « Sans réponse », qui souvent polluent la lecture par la présence de champs inutiles.

      Voilà qui semble une réponse :
      1) dupliquer le fichier _base.html du dossier plugins/saisies/saisies-vues au dossier squelettes/saisies-vues (dossier qu’on créera, le cas échéant).
      2) ligne 19 : modifier la DIV et ajouter

      [ style="(#GET{reponse}|non)display: none;"]

      ce qui devrait faire (si on rajoute une petite marge entre les lignes, agréable visuellement) :

      <div class="afficher[ afficher_(#ENV{nom})][ saisie_(#ENV{type_saisie})][ (#ENV{li_class})][ (#GET{reponse}|non)sans_reponse vide]" style="margin: 0 0 10px 0;[ (#GET{reponse}|non)display: none]">

      L’email « respire » de nouveau, débarrassé des champs laissés vides.

    Répondre à ce message

  • 3
    ploufplouf

    Bonjour,

    J’ai un formulaire avec un champ caché qui se remplit automatiquement suivant une information récupéré du profil du visiteur. Ce champ me sert à indiquer les destinataires du mail de notification.

    Malheureusement ce champ caché apparait dans le mail envoyé également au visiteur comme accusé de réception.

    Comment faire pour éliminer les champs cachés dans le mail d’accusé de réception qui je pensais étaient invisibles par défaut dans l’accusé de réception tout du moins ?

    Merci de votre aide.

    • ploufplouf

      Re,

      Je précise un peu ma demande.
      Je suis sous Spip 3.1.0, formidable 2.9.5, Saisies 2.5.24.
      Je suis sur un espace privé avec identification de visiteur. Selon le visiteur, il a accès à une offre de service personnalisée et peut accéder à différents formulaires lui permettant de me communiquer ses informations.
      Selon le visiteur, les formulaires sont adressés à différents destinataires.
      Je voudrais intégrer dans le champ #BIO de la fiche auteur les adresses mails correspondantes pour cet auteur, et pouvoir les récupérer dans un champ du formulaire pour en définir les destinataires.
      Le formulaire reste le même, seuls les destinataires changent selon la classification du visiteur.
      J’ai donc insérer un champ caché dans le formulaire et l’ai prérempli par les infors du champ BIOgraphie de l’auteur. Ce champ comporte plusieurs adresses mails, séparés par des virgules.
      Le problème est que je ne veux pas que ces adresses soient visibles dans le mail d’accusé de réception adressé à l’auteur.
      Peut-on exclure de l’affichage les champs cachés pour cet email d’accusé de réception de manière argumentaire dans la balises #VOIR_SAISIES.
      Ou faut-il que je créer un formulaire par type de visiteur (pas très pratique pour mes exports en csv) ou encore faut-il que je fasse un traitement pour chacun de mes formulaires reprenant champ par champ pour le mail d’accusé de réception (j’ai environ 8 formulaires différents et je sais pas comment faire pour coder ça...)
      Si vous pouvez m’aider je vous remercie par avance

    • ploufplouf

      Quelqu’un peut-il m’aider... je ne trouves pas comment faire...

      Help please ;)

    • ploufplouf

      Up +1

      Personne pour m’aider ?

    Répondre à ce message

  • 2

    Bonjour

    je test ce plugin mais je ne vois pas a quel endroit je peux créer un champ pour que l’internaute puisse « uploader » un fichier ?

    aurais je loupé quelque choses ?

    jacques

    • Vous n’aviez rien loupé, aussi surprenant que cela puisse paraître, ce si bel outil n’est à priori toujours pas équipé de cette fonctionnalité essentielle, qu’on retrouve dans les gestionnaires de formulaire des CMS les plus courants. Cette question resurgit dans les commentaires tous les deux mois, on la repère facilement, c’est la seule qui ne reçoit jamais de réponse ^^

    • ploufplouf

      Bonjour,
      Sur toutes mes lectures sur le sujet, ce n’est pas si simple à mettre en place apparemment.
      D’une part, purement et simplement, pour coder le module de téléchargement (si quelqu’un ayant les compétences pour s’y atteler et filer un coup de main aux développeurs du plugin veux participer, je penses qu’ils seraient d’accord pour partager leurs infos... perso, j’ai pas les compétences :( )... mais également pour éviter de créer une faille de sécurité, point relativement important il me semble.
      Mails il est vrai que cette option serait un réel plus.
      Merci à tous les développeurs qui participent au développement de tous les plugins et de Spip.

    Répondre à ce message

  • 3

    Autre question : est-il envisageable de faire remplir le formulaire à partir d’un lien hypertexte. La personne clique sur le lien de son mail et arrive sur le formulaire par le biais du clic : le nom, prenom etc sont alors déjà renseignés. Ce serait magique !
    Existe-t-il un tutoriel à ce sujet ? Qui aurait la gentillesse de m’expliquer le processus ?

    Un grand merci,
    SV.

    • Tout à fait.
      Cela signifie par contre qu’on doit disposer de ces infos avant d’envoyer le mail.

      On fait alors passer les infos en variables d’environnement dans le lien :
      monsite.com/mapage.html ?email=email&nom=nom&prenom=prenom etc

      Cette page contient un modèle qui récupère les variables et les transmet au formulaire :

      dans l’article on appelle par exemple le modèle :
      <formulaire_prerempli|id_formulaire=N>

      Et notre modèle formulaire_prerempli.html :

      #FORMULAIRE_FORMIDABLE{#ENV{id_formulaire}, #ARRAY{input_1, #ENV{nom},input_2, #ENV{prenom},,input_3,#ENV{email}}

      Les variables sont transmises au formulaire dans un ARRAY où on précise chaque fois le nom du champ (select_1, input_3 etc) et la valeur qu’on lui associe.

    • Je complète ma réponse précédente et je vais plus loin : si on dispose des infos AVANT d’envoyer le mail, c’est qu’en fait on doit les avoir quelque part dans une table (dans la table AUTEURS par exemple).

      Dans ce cas il n’y a même pas besoin de faire transiter les infos par mail pour ensuite les récupérer dans l’url puisqu’on peut aller chercher tout ça directement dans le modèle grâce à la boucle qui va bien.

      Il suffit alors d’envoyer juste l’identifiant de l’auteur pour le récupérer en variable d’environnement dans la page du formulaire. Cependant pour des raisons de sécurité il n’est pas forcément recommandé de faire passer l’id_auteur en « clair ». Cela permettrait aux utilisateurs, en changeant l’identifiant, d’utiliser voire de pirater le compte d’un autre. Il faut donc crypter ou hasher cet identifiant. Il y a des fonctions pour cela mais je ne les connais pas.

      Peut-être quelqu’un peut-il nous éclairer sur la façon de « hasher/déhasher » une variable dans spip ?

    • Merci pour ces éléments.
      Mais je n’y arrive pas.

      J’ai créé mon fichier formulaire_prerempli.html avec ces données >>
      #FORMULAIRE_FORMIDABLE#ENVid_formulaire, #ARRAYradio_1,#ENVdate,input_1, #ENVnom,input_2,#ENVprenom,input_3,#ENVadresse,input_4,#ENVcp,input_5,#ENVville,input_7,#ENVemail puis ai ajouté ceci dans mon article >> <formulaire_prerempli|id_formulaire=8>

      MAIS RIEN :(
      Ou me suis je planté.

    Répondre à ce message

  • 1

    Bonjour

    J’ai récemment mis à jour Spip en 3.0.22 ainsi que Formidable en 2.9.13 et je viens de m’apercevoir que mon affichage conditionnel sur les champs ne fonctionne plus : les champs conditionnés apparaissent désormais d’office alors qu’auparavant ça fonctionnait sans souci.

    Quelqu’un d’autre a-t-il le même problème ?

    Merci

    • Réponse à moi-même :

      J’ai refait le formulaire et là ça marche. Complètement bizarre.

      Désolé pour le bruit ;-)

    Répondre à ce message

  • 3

    Bonjour,

    concernant les boutons radios, est-il possible d’ajouter un champ « choix libre » ou la personne inscrirait ce qu’elle souhaite ? Comment procéder ?

    J’essai de trouver de la doc sur ca mais je rame. Si vous pouviez me donner un début d’explication ou me dire comment faire ...?

    MERCI !!!

    • modifie le champ et dans liste des choix possible mettre

      choix 1|voiture
      choix2|titi
      choix3|autre

      etc etc

    • Merci pour cette solution. Effectivement, je crée ensuite un champs qui ne s’affiche que lorsque le choix autre est coché et hop. Mais j’ai un autre souci : lorsqu’il s’agit de payer, de faire un don, alors ce système ne fonctionne pas. Le montant libre n’est pas ajouté comme variable du bouton radio >> Au moment de payer, il est indiquer 0.

      Une idée ?

    • pas de réponse ? Je m’ajoute, +1 !

    Répondre à ce message

  • 1
    Philippe Robin

    bonjour

    sauf erreur de ma part, il n’y a pas de champ de type « envoyer un document » (image, pdf, etc..)
    le champ « document » fait référence aux documents de la médiathèque de Spip et non des documents du poste utilisateur du formulaire.

    Y a-t-il un moyen de palier à ça ?

    merci

    Répondre à ce message

  • 1

    Bonjour,

    Formidable est un super plugin.

    Il me semble qu’il serait parfait si l’on pouvait lui ajouter un peu de Web Forms et préciser le type des champs « ligne de texte » type="tel" ou encore type="email". Les visiteurs mobiles seraient ravis...

    J’avais même imaginé que cela soit paramétré en fonction du type de vérification que l’on applique au champ.

    Qu’en pensez-vous ?

    Répondre à ce message

  • 3

    Correction / Modifier une réponse antérieure
    Bonjour : je découvre ce plugin que j’envisage d’utiliser pour mettre en place un questionnaire en ligne. Je vais envoyer l’url de la page concernant le formulaire à x personnes...
    Comment-il faut-il faire pour qu’une personne ayant rempli un formulaire puisse y revenir 1, 2, 5, 30 jours après et modifier/compléter sa réponse ?
    Nécessairement lui créer un identifiant visiteur et ne rendre le questionnaire remplissable qu’après s’être identifié ? J’imagine en effet que l’identification par cookie sera périmée (ie = quelle est la durée de vie du cookie posé et/ou que faire en cas d’effacement du cookie ?)
    Merci d’avance de ton éclaircissement

    • Bah pour que ce soit fiable faut forcément proposer le formulaire que à des gens connectés avec un compte, à mon avis.

    • Du coup... il faut concevoir un squelette genre « accès restreint » (qui nécessite donc une identification) ? Une fois qu’un visiteur a rempli / commencé de remplir un questionnaire, il le retrouvera automatiquement dans l’état dans lequel il l’aura laissé en partant la fois précédente et pourra poursuivre la saisie ? C’est cela ?

    • Si t’as activé le fait qu’ils peuvent modifier après coup ET qu’il n’y a qu’une réponse par personne dans la config du traitement Enregistrement oui. Cf aussi la discussion plus bas d’une personne qui voulait aussi permettre la modif après coup : l’autre méthode est de passer explicitement le numéro de la réponse à modifier (mais dans ce cas ça bypass la config du traitement). Le cas le plus simple est le premier, une réponse par personne et acceptation des modifs, dans ce cas ça va chercher tout seul automatiquement la dernière réponse de la personne.

    Répondre à ce message

  • 3

    Bonjour,

    Avec SPIP 3.1, le bouton supprimer toutes les réponses les met avec la puce noire, mais dans la liste des formulaires, le nombre de réponses reste inchangé.
    En cliquant sur ce nombre, on arrive sur l’onglet [Toutes] qui liste toutes les réponses avec la puce noire, et l’onglet [Supprimées] n’affiche rien.

    De plus, le plugin Corbeille ne liste aucune réponses alors qu’il devrait logiquement lister celles avec la puce noire, non ?

    • Tu peux tester en mettant {formulaires_reponses.statut != poubelle} dans la boucle de prive/objets/liste/formulaires.html ?

    • Ah et sinon la Corbeille ne marche que si on l’implémente. Il n’y a jamais rien eu de mécanisme générique dans le plugin, ça fonctionne pas squelette, et donc il faut l’implémenter pour chaque objet voulu.

    • Du coup, j’ai fait ça : http://zone.spip.org/trac/spip-zone/changeset/95529

      Le statut à prendre en compte était ’poubelle’ et non ’refuse’

      En filtrant selon la suggestion de Rastapopoulos, les formulaires n’ayant que des éléments à la poubelle n’étaient plus listés

      Changement de fusil d’épaule :

      • affichage des publiés (à modérer)
      • utilisation de http://contrib.spip.net/Astuces-SPIP : [(#VAL{commande}|table_objet_sql|sql_countsel{statut='paye'})] pour compter des objets éditoriaux sans passer par une boucle
      • Affichage comme avec la médiathèque du nombre d’éléments dans les onglets de la page de réponse

    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