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

  • Bumborass

    Bonjour,

    J’ai construit un formulaire de contact. Je voudrais savoir, vu que j’ai activé des champs obligatoires, s’il y avait possibilité de retirer le fameux « info obligatoire 02 ».

    Merci de votre attention,
    Bonne journée.

    Répondre à ce message

  • 1

    Salut,

    que penses tu d’ajouter suivre_invalideur() dans la fonction d’enregistrement en base, soit de manière automatique soit sous option (« invalider le cache » dans la configuration du traitement).

    Ce serait pour répondre à ce besoin : http://article.gmane.org/gmane.comp.web.spip.user/196118

    • Oui effectivement il faudrait. Mais tu as raison, peut-être en option car ce n’est pas sur tous les sites qu’on a besoin de récupérer les infos des formulaires dans la partie publique, et donc il vaut mieux éviter de péter le cache dès qu’une personne répond à n’importe quel formulaire.

      Du coup ça serait à mettre en option du traitement « enregistrement ».

    Répondre à ce message

  • 6

    Bonjour,
    Merci pour ce plugin très pratique et simple d’utilisation.
    Je tombe sur un os qui dépasse mes compétences et je ne sais pas si ce que je veux faire est possible.
    J’ai une Bdd alimentée par un module développé en php en périphérie de spip. Un formulaire permet de saisir des sorties de ski qui sont enregistrées dans la base.
    Je veux aujourd’hui rapatrier cette fonction de saisie des sorties dans spip en utilisant formidable.
    Jusque là pas de problème.
    Sauf qu’il faudrait que je récupère les anciennes sorties pour pouvoir faire des recherches sur l’ancienne base.
    Cette ancienne table est construite de manière simple. Exemple de quelques champs :
    Id_sortie—>valeur
    Auteur —> valeur
    nom_sortie —> valeur
    date —> valeur
    etc.
    La structure produite par formidable avec deux tables est beaucoup plus complexe, et du coup la structure des données est très différente de ce qui existait précédemment.

    Est-ce qu’il y aurait une solution pour envoyer les données, à partir du formulaire formidable, directement dans la table existante sans passer par les tables formulaires_reponses_champs et formulaires_reponses ?
    Ou autre solution qui me permettrait de fusionner les nouvelles données avec les anciennes ?

    Merci d’avance pour l’éclairage de lanterne.

    Répondre à ce message

  • 3

    bonjour,
    je rencontre un problème lors de l’export des réponses à un formulaire (je précise : après avoir réinstallé tout mon spip et restauré la bdd)
    je récupère bien le fichier .csv ou .xls, mais dans les 2 cas les caratères ne sont plus lisiles (quelque soit l’encodage utilisé)
    une idée (c’est assez embêtant)
    merci infiniment pour votre aide

    • Ah quand il commence à y avoir des problèmes d’encodage, difficile d’imaginer des solutions sans avoir les mains dans le cambouis et tester plein de choses. Il faudrait déjà voir comment c’est encodé à l’intérieur de la base de données, dans les tables.

    • bonsoir,
      oui j’avais bien pensé à l’encodage, mais je suis en utf8_general_ci : coté spip et bdd.
      c’est apparu après avoir réinstallé spip et restauré la base

    • Je ne sais pas ça peut aider à la compréhension, mais lorsque je récupère via ftp le fichier généré par l’export dans /www/tmp/cache/export le problème n’apparait pas.

    Répondre à ce message

  • 1

    Bonjour et merci pour votre travail.
    Je rencontre un problème, je pense que c’est depuis la maj en php 5.4.45 (herbégé chez ovh)
    lors que je valide une réponse à un formulaire, j’ai l’erreur suivante qui s’affiche :
    Strict Standards : Non-static method Facteur::html2text() should not be called statically in /home/monsite/www/plugins/formidable_v0/formidable_v0/traiter/email.php on line 109

    mon spip est en 2.1.11 et formidable en 0.8.6, facteur en 1.8.9 et les autres plugins associés à jour.

    Une idée ?

    Merci d’avance pour votre aide

    • Malheureusement je n’ai plus de SPIP 2.1 depuis longtemps pour pouvoir tester. Mais il s’agit d’une erreur liée à une mise à jour des fonctions du Facteur et qui avait déjà été corrigé sur l’utilisation dans Formidable ensuite. Peut-être que ça avait été adapté sur le Formidable pour SPIP 3 mais par reporté pour la version pour 2.1… je ne sais plus. Si tu as déjà toutes les dernières versions de tous ces plugins, ce serait le cas.

    Répondre à ce message

  • 4

    Bonjour,
    merci pour ce plugin très très très utile !

    J’aurai besoin de plus d’explications pour la mise en forme des mails.
    En faite pour des formulaires longues, les mais envoyés avec formidables peuvent venir assez peu maniables. Surtout en plus du mail, en version imprimé, qui donne souvent plusieurs feuilles avec beaucoup de blanc (même si seulemet un champ rempli).

    Premièrement je souhaiterai pouvoir enlever les champs « sans reponse », qui sont pratiquement toujours inutiles.
    Puis mettre titre et réponse sur une seule ligne, avec un deux-points derrière le titre.

    Je présume que tout cela se trouve derrière #VOIR_SAISIES#ENV*saisies, #ENV*valeurs ? Donc pas possible de faire la mise en forme seulement dans les fichiers dans notifications ? Ou qu’est-ce qui m’échappe ?

    d’avance merci pour vos éclaircissements
    joz

    ps : Le top serai d’en plus pouvoir inclure les résultats en csv dans le mail :)

    • Salut,
      je suis toujours à la recherche de réaliser un mail de réponse avec une meilleur mise en page.
      Est-ce que ce que je décris ci dessus est en faite faisable avec formidable ?
      Merci d’avance pour une réponse
       : )
      joz

    • Yo,
      en fait #VOIR_SAISIES c’est vraiment un truc tout-en-un qui fait tout d’un coup.

      Si on veut faire plus précis, faut faire à la main et c’est un peu plus compliqué. Il y a plusieurs choses mais c’est incomplet :

      • #VOIR_SAISIE permet d’afficher la vue d’une seule saisie mais uniquement en y remettant toutes les options à la main.
      • #VOIR_REPONSE permet d’afficher la vue d’une réponse à un nom de champ (input_1 par ex) mais seulement pour un truc enregistré en base, dans une boucle (FORMULAIRES_REPONSES), or dans les emails justement ça on ne le sait pas encore

      Du coup il manque un truc dans ’lune ou l’autre des balises pour pouvoir afficher la vue de la saisie mais en donnant le tableau complet de la saisie directement (voir en allant le chercher juste avec son nom comme pour voir_reponse).

      Mais désolé je n’ai pas de code clé-en-main à donner pour l’instant. Il me semble qu’on avait déjà parlé de ce genre de chose sur la liste spip-zone et peut-être que quelqu’un avait déjà un code, je ne sais plus, de mémoire, là. :(

    • Bonjor,
      je reviens encore à ce sujet ...

      Est-ce qu’il ne serai pas possible de ne pas inclure les champs du formulaire dans le mail d’accusé de réception ? Cette longue liste de « sans réponse » semble perturber pas mal d’utilisateurs de notre site.

      Et dans le mail vers le gestionnaire du formulaire : au lieu d’un mail avec tout le résultat du formulaire*, un lien vers la page du résultat : ?exec=formulaires_reponse&id_formulaires_reponse=xxx
      Et là je pourrai gérer l’affichage avec des boucles, non ?

      merci (1000* pour ce plugin et tout !)
      joz

      * car il l’imprime à chaque fois.. et ça fais beaucoup de papier gâchis avec des fueilles remplis des « sans reponse »

    • Les deux emails (l’accusé et aux admins) sont déjà en squelette, donc personnalisables. Évidemment c’est un peu « tordu » car pour ne pas avoir le comportement par défaut, je suppute qu’il faut faire un peu plus de boucle que juste l’appel à la fonction de « vue » des réponses d’un formulaire complet, mais c’est possible.

      Et pour le lien, on peut pas vraiment car le traitement email et le traitement enregistrement sont deux choses séparées et indépendantes, on peut avoir l’un sans l’autre et ya pas d’ordre, on peut pas dans l’email savoir s’il y a eu une réponse enregistrée en base (ce n’est pas obligatoire) ni à fortiori savoir son identifiant pour trouver l’URL d’admin. C’est possiblement un truc à améliorer, par exemple en permettant aux traitements de déclarer un ordre (et que donc le traitement email soit toujours en dernier, ce qui permettrait d’essayer de trouver des infos sur les traitements précédents). Voilà voilà…

    Répondre à ce message

  • 2

    Bonjour,
    Un gros formulaire tourne depuis deux ans sans aucun souci. J’ai une petite modif à faire (enlever une option radio)
    Quand je fais « Configurer les champs » c’est un peu le boxon. Les barres d’action de chaque champ (move, edit, del) sont toutes les unes au dessus des autres en haut à droite de la div d’édition.

    impossible de modifier mes boutons radios donc et je fais la modif en sql sur la table spip_formulaire, ça me dit que le formulaire n’est pas configuré.

    ce problème d’affichage reste identique en chrome, firefox ou edge

    • Je suis à jour du plugin Saisies (c’est lui qui contient le constructeur), et je ne reproduis ça nulle part sur plusieurs sites qui l’ont.

    • Désolé pour le bruit.
      J’avais travaillé sur le fichier « _base » qui s’était retrouvé dans mon dossier squelette.
      En revenant au plugin vierge, toutse passe bien.

      Merci pour ta réactivité et pour ce chouette plugin Rasta !

    Répondre à ce message

  • 4

    Bonjour,

    J’essaie d’intégrer un formulaire avec dépliage des éléments en fonction de choix checkbox. Dans l’espace privé de SPIP je n’ai aucun soucis, mais en public aucune mise en forme et tout est déplié. Comment puis-je récupérer la feuille de style du BO pour l’intégrer à mon interface publique ?

    merci :)

    • Aucun rapport avec une feuille de style à priori, car c’est du javascript.

      Si tout est déplié c’est que le javascript qui masque les champs ne se lance peut-être pas, possiblement car Javascript est planté à cause d’une erreur bloquante venant d’un autre script. Il faut regarder dans les outils webdev de Firefox par exemple, dans la console javascript, pour voir s’il y a une vilaine erreur toute rouge.

    • Yep j’ai ces erreurs là :

      Uncaught TypeError: jQuery(...).parents(...).formulaire_dyn_ajax is not a function
      2ajaxCallback.js:21 Uncaught TypeError: Cannot read property 'load_handlers' of undefined

      Commun à SPIP ? Accessoirement mon site utilise le framework de Boostrap...

    • Je ne sais pas trop, mais c’est peu probable que ça vienne des quelques lignes de JS de Formidable puisque la fonction de champs conditionnels fonctionne dans de nombreux sites.

      Mais pour tester une fonctionnalité, c’est toujours pareil, il faut d’abord désactiver tous les autres plugins non nécessaires (comme expliquer dans le lien « Les choses à faire avant de poser une question »). Il faut tester avec un SPIP sans rien sauf le ou les plugins à tester (quand il y a des dépendances). Puis ensuite réactiver petit à petit les autres plugins pour voir lequel fait planter.

    • J’ai résolu le problème en supprimant mon fichier Jquery dernière version de mon head (bon j’ai fait un 2e head pour certains articles).

    Répondre à ce message

  • 1

    Dans quel fichier faut-il bidouiller pour qu’au focus dans un champ la valeur par défaut s’efface ?

    Merci

    • Une valeur par défaut, c’est vraiment une valeur pré-remplie qu’on va valider. Si c’est juste un exemple de remplissage qui disparait automatiquement, toi tu parles d’un placeholder.

    Répondre à ce message

  • 2

    Bonjour,
    Je ne sais pas si c’est un problème de configuration : après avoir envoyé le formulaire, les valeurs saisies s’affichent avec un message de retour. Jusque là tout va bien.

    Mais quand on rafraichis cette page, la saisie est enregistré une deuxième fois dans la bdd. Est-ce qu’il y a moyen d’éviter cela ?

    D’avance merci

    • Ben ça n’a pas de rapport avec Formidable : ça fait normalement ça pour à peu près n’importe quel formulaire de n’importe quel page HTML au monde : quand on valide un formulaire, et qu’on fait F5 sur la page où l’on arrive, ça relance l’envoi (POST) du formulaire. D’ailleurs, ça dépend des navigateurs, mais sur Firefox par exemple, il te demande explicitement si tu es vraiment certaine de vouloir renvoye/reposter le formulaire dans une fenêtre qui s’ouvre (ce qui permet de ne pas le faire par hasard), après dans les autres navs je sais pas…

    • Ah ok, merci pour la réponse.
      ++
      j

      ps : tout les Firefoxes n’ont pas l’air d’afficher ce message.. celui au bureau ne l’affiche pas, mon privé bien.

    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