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

  • 4
    jaseur Boreal

    Bonjour,

    Dans un formulaire comportant une liste de 20 propositions,

    Comment procéder pour limiter seulement à 3 réponses maximum

    • soit en utilisant les « Cases à cocher »
    • ou en utilisant une « liste multiple » ?

    Des solutions existent-elles ?

    Merci de votre aide.

    • Non ça n’existe pas du tout pour le moment. Le truc c’est que ce n’est pas une vérification de valeur (donc pas dans le plugin Vérifier qui génère la liste des vérifications de champs libres), mais un comptage du nombre de choix dans un tableau, c’est-à-dire au moins pour les cases à cocher et les select multiples.

    • jaseur Boreal

      Merci pour la réponse.

      Pourrait-on contourner ce non-comptage du nombre de choix dans les « liste multiple » et « cases à cocher », en mettant 20 boutons « radio » ou 20 « cases uniques » , mais avec un affichage « conditionnel » dès que trois boutons ont été remplis ?

      C’est peut-etre tordu comme idée ?

    • Euh oui ça me paraît tordu. :D

    • Spipmalion

      Tu mets 3 listes déroulantes simples avec chacune les 20 options, c’est pas mal ?
      Ca permet aussi de hiérarchiser les 3 choix au cas où (le + important en 1er)

      Un petit JS optionnel, qui fonctionnera chez 99% des users, pour éviter les doublons

    Répondre à ce message

  • 4
    Jaseur Boreal

    Bonjour,

    Sur un spip 3.017 avec squelette Escal,
    j’ai une « erreur survenue lors de l’envoi du courriel. »
    au remplissage d’un formulaire incorporé dans un article avec

    <formulaire|formidable|id=XX>

    Les champs simples sont les suivants

    • adresse e-mail *
    • nom *
    • prénom *
    • Organisme
    • Inscription : Je m’inscris - Je me désinscris

    Le message est : « Une erreur est survenue lors de l’envoi du courriel. »
    et ensuite ceci :
    « Warning : max() : When only one parameter is given, it must be an array in /home/siteweb/www/plugins/auto/formidable/v2.6.3/traiter/enregistrement.php on line 57 »

    L’adresse de l’article concerné est ici

    Je tourne en rond sans trouver comment faire fonctionner ce simple questionnaire d’inscription.

    Avez-vous une solution ?
    Merci de votre aide.

    • Jaseur Boreal

      Information complémentaire oubliée,
      les adresses email entrées sont pourtant comptabilisées et enregistrées parmi les réponses lues dans la partie privée du formulaire formidable .

      Bizarre ! ..

    • RastaPopoulos

      L’envoi du mail et l’enregistrement sont deux traitements n’ayant rien à voir, ils sont appelés séparément. Pour l’envoi du mail, il faut que le serveur puisse envoyer des mails : tu as d’autres mails qui marchent bien sur le site ? Pour bien configurer, il faut tester avec le plugin Facteur qui gère, si l’envoi fonctionne dans sa page de config.

    • Jaseur Boreal

      Bonsoir,
      Les mails partent correctement par le smtp configuré ches OVH lorsque l’on utilise facteur pour tester les newsletter avec mailsuscriber ...

      • Facteur 3.0.13
      • MailSubscribers 1.5.5
      • Newsletters 1.3.5

      Avec Facteur le test donne : « L’email de test a correctement été envoyé. Si vous ne le recevez pas correctement, vérifiez la configuration de votre serveur ou contactez un administrateur du serveur. » et on reçoit bien un email dans la seconde qui suit. (Ovh est à 10km)

      C’est avec ce message d’erreur de Formidable que je ne comprends pas trop ce qui disfonctionne .

      Merci de tous conseils.

    • RastaPopoulos

      Pour le Warning, c’est normalement corrigé par : http://zone.spip.org/trac/spip-zone/changeset/84342

    Répondre à ce message

  • 1

    Bonjour,

    lorsqu’on crée un formulaire, qu’on ajoute le champ de la liste des auteurs à un squelette (par ex : <formulaire|formidable|id=12>, existe-t-il un moyen de supprimer 1 voir 2 auteurs de cette liste ?

    MERCI !

    • heu, je n’ai rien compris... vous parlez d’ajouter des auteurs à un squelette, mais vous ne citez pas de squelette, et le code que vous indiquez ne parle pas d’auteur....

    Répondre à ce message

  • Bonjour à tous,

    J’ai des problèmes pour exporter les réponses à un formulaire au format csv. Lorsque je clique sur le lien “Exporter les réponses”, le téléchargement échoue systématiquement. Chromium me dit “Erreur réseau inconnue”, Firefox me donne du “/tmp/gqx2ysVx.csv.part ne pourra être enregistré car le fichier source ne peut être lu. Réessayez plus tard ou contactez l’administrateur du serveur.” Le fichier est pourtant bien généré, je le trouve dans tmp/cache/export/ , mais c’est le téléchargement qui plante.

    J’ai d’abord pensé à un souci de configuration du serveur, mais le problème se produit aussi en local. Détail important : c’est sur un SPIP 2.1.26, avec la dernière version de formidable compatible 2.1 : la 0.8.5. Spip-bonux est aussi à jour…

    Merci d’avance pour vos lumières !

    Répondre à ce message

  • 9

    Bonjour,

    Il me semble que je rencontre une petite erreur de comportement pour la vérification d’un champ obligatoire Destinataires.

    J’ai créé un champ Destinataire dont je souhaite la saisie obligatoire, je l’ai paramétré pour « Permettre à l’utilisateur de choisir un seul destinataire ». J’ai également renseigné le label du premier choix vide par « Choisissez... ».

    L’erreur détectée est que si l’utilisateur omet de renseigner le destinataire, le formulaire est tout de même validé, considérant sans doute en raison du label « Choisissez... » que le champ n’est pas vide.

    Bug or not bug ?

    • Le label n’a rien à voir, c’est l’attribut value="" qui compte. S’il est vide, ça envoie du vide.

    • Tout à fait, le code source du label vide est d’ailleurs :

      <option value="">Choisissez...</option>

      Cependant, lorsque je renseigne un label à ce champ destinataire, la vérification de la sélection ou non par l’utilisateur ne se fait pas : même si aucune sélection n’est faite le champ est considéré comme bon ( Je peux t’envoyer un lien en MP pour que tu puisses constater ).

      Merci en tout cas ton retour.

    • S’il y a bien une valeur vide value="" dans le HTML, alors le formulaire ne poste rien. Si ce n’est pas le cas, le navigateur a un problème… (IE ?)

      Enfin, l’erreur peut aussi être côté vérification… mais je ne vois pas pourquoi.

    • Je suis pas fou, je travaille pas sur IE ;-)
      Cela se produit sur Firefox, tout comme sur Chrome.

    • Une remarque complémentaire qui peut sans doute mettre sur la piste.
      Je pense que dans l’espace privé, le modèle de paramétrage du champ type Destinataire n’est pas bon, en particulier au niveau de l’onglet Validation.
      En effet, bien qu’il s’agit d’une liste de choix, le paramétrage de Validation présente - outre le caractère Champ obligatoire et Message d’obligation - le paramètre Type de vérification à effectuer... qui n’a pas lieu d’être.
      Bien sûr par défaut, il est réglé à Aucune...

    • Hello RastaPopoulos,

      Confirmes-tu qu’il y un soucis concernant le champ type Destinataires lorsqu’on active la validation d’une saisie obligatoire ?
      Si oui, as-tu des pistes pour corriger le comportement ?

      Merci à toi

    • Héhé, merci RastaPopoulos ;-)
      Le champ est dorénavant correctement contrôlé.

      Je crois qu’une amélioration pourrait être encore apportée.
      Comme dit précédemment, dans le paramétrage du formulaire, pour le champ Destinataire, l’onglet Validation présente - outre le paramètre Champ obligatoire et Message d’obligation - le paramètre Type de vérification à effectuer.
      Ce dernier paramètre ne devrait pas être proposé pour ce type de saisie.

      Qu’en penses-tu ?

    Répondre à ce message

  • 2

    bonjour,
    j’utilise ce formidable plugin ... et j’aimerai pouvoir imprimer les informations du mail envoyé aux destinataire avec les réponses ou imprimer les réponses depuis l’espace privé ? est-ce possible ? par quel biais ?
    merci

    • Je ne saisis peut-être pas trop la question, mais… : en faisant Fichier=>Imprimer dans ton client email ?

    • je pensais à un pdf de la réponse ou à une impression depuis l’espace privé
      je ne voudrais pas l’entête du message lorsque j’imprime le mail coupe la réponse et la met sur 2 pages mais bon peut être que j’utilise mal la messagerie
      sinon Le plugin est vraiment FORMIDABLE
      merci de m’avoir répondu

    Répondre à ce message

  • 1

    Bonjour,

    Super le plugin ! ça sent la belle ouvrage.

    Néanmoins : où sont les css ?(oui il faut du style, les programmeurs en manquent cruellement)

    un petit récapitulatif des css utiles serait utile !

    dragon

    • Non.

      Ce plugin sert à générer des formulaires. Pas à ajouter des choses aux thèmes graphiques des sites.

      Pour styler les formulaires, ben c’est dans ton thème graphique du site. Comme n’importe quels autres styles des éléments de base : typo, titrage, couleur, boutons… et formulaires. Cela ne fait pas parti, et ne fera jamais parti, du cadre de ce plugin.

    Répondre à ce message

  • 1

    Bonsoir,

    D’abord un tout grand merci pour ce plug-in, c’est vraiment bien pensé et très pratique à utiliser.
    J’ai néanmoins une question : est-il possible de changer la valeur du bouton d’envoi (input « submit ») d’un formulaire inclus dans un squelette ? Je cherche depuis plusieurs dizaines de minutes et je n’arrive pas à trouver comment faire. Merci :).

    • Non, malheureusement, ce n’est pas une fonctionnalité existante pour l’instant. À rajouter dans les trucs à faire…

    Répondre à ce message

  • 2

    Salut,

    J’essaie de faire passer des infos à des champs cachés d’un formulaires. Le formulaire apparaît bien. Ces infos sont déjà en base mais rien ne passe au le formulaire. Si je test en dehors du formulaire, les infos sont correctement extraites. Est-ce que je m’y prends bien ?

     
    #FORMULAIRE_FORMIDABLE{concourant, #ARRAY{Evenement,#ID_EVENEMENT,Nom du participant,#NOM,Prenom du participant,#PRENOM,Tel fixe du participant,#GET{numerofixe},Tel mobile du participant,#GET{numeromobile},Rue et n du participant,#VOIE,Complement d_adresse,#COMPLEMENT,Code postal du participant,#CODEVILLE,Ville du participant,#VILLE}

    merci de vos réponses.

    • Ben oui, c’est le nom des champs que tu dois mettre en clé du tableau. Comme expliqué ici plus haut :

      Vous pourrez trouver les noms de vos champs dans l’aide-mémoire situé sur la page de configuration des traitements.

    • Autant pour moi et désolé pour le bruit. Les champs sont des hiden listé. Si je lis la doc à moitié rien ne va plus. :)

    Répondre à ce message

  • 8
    Herve B.

    Bonjour,

    J’ai besoin que les réponses du formulaire puisse être envoyées à une adresse email A ou une adresse email B en fonction du choix d’un champ sélection.
    Est-ce que c’est directement possible par le paramétrage du formulaire ?

    Sinon, sans doute dois-je éditer le fichier formidable/ traiter/email.php ? Dans ce cas, je ne connais pas la syntaxe pour y manipuler la variable selection_1 .

    Merci pour votre aide,
    Hervé

    • C’est une fonctionnalité qui n’existe pas pour le moment.

    • Herve B.

      Merci pour le retour :-)

      Pour mon cas particulier, la piste de l’édition du fichier formidable/ traiter/email.php est-elle la bonne ?
      Je n’arrive pas à y récupérer la variable $selection_1 pour déterminer, en fonction de sa valeur, une valeur pour la variable $destinataires.

      Je serais preneur d’un petit coup de pouce !

      Merci en tout cas pour ce formulaire qui porte bien son nom,
      Hervé

    • Si c’est juste pour UN formulaire, tu peux plutôt créer des comptes utilisateurs fictifs, avec les emails voulus, avec comme nom le texte des choix que tu veux présenter, et utiliser le type de champ Destinataires, qui sert à ça (choisir un ou plusieurs destinataires).

    • Merci RastaPopoulos de t’intéresser à mon problème. Je ne suis pas sûr de comprendre ta proposition.

      Je te détaille mon besoin :
      les utilisateurs sont invités à renseigner un (ou plusieurs) formulaires de contact - dans leurs informations d’adresse, selon le département qu’il renseigne (champ sélection), leur réponse est envoyée soit à une adresse email A soit une adresse B.

      Qu’en penses-tu ? Je suis prêt à mettre les mains dans le cambouis si on me donne quelques ficelles.

      Sinon, ben je referai tous mes formulaires à la main en CVT... ce serait bien dommage :-(

    • Ben tu fais un champ Destinataires avec comme label « Département », et tu le configures pour donner le choix entre des comptes utilisateurs de ton choix, que tu nommes avec les départements en questions (il faut les avoir créé avant, comme dit précédemment).

    • Ok, c’est une option !

      Mais, pourquoi précisais-tu que c’était valable pour UN formulaire ?
      Ne puis-je pas utiliser cette parade pour plusieurs formulaires où le département de l’utilisateur est demandé ?

    • Si si, bien sûr que si. C’était plus par rapport au nombre de cas différents où tu dois utiliser le même principe, après ça fait créer plein de faux comptes pour rien. C’est juste que ça peut devenir chiant. Mais si c’est toujours pour le même besoin, c’est toujours les mêmes comptes de toute façon.

    • Merci RastaPopoulos, ça m’a l’air de bien fonctionner !
      Pas besoin de refaire les formulaires en CVT, ouf !

      Et encore merci pour le service SAD hyper réactif :-)

    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