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

  • 1

    Bonjour,
    je voudrais bien modifier la mise en page du formulaire dans le site public mais je ne sais pas quel fichier surcharger.
    Merci pour votre aide

    • Comme n’importe quoi d’autres dans ton site, ça n’a pas de spécificité avec ce plugin, qui ne s’occupe absolument pas de graphisme.

      Ça dépend de ton squelette/thème, celui fournit de base ou un autre (et dans ce cas demander à son auteur). Pour la dist de SPIP, on peut avoir un fichier « perso.css » et s’il est présent c’est pris en compte pour ajouter ses règles après les autres à priori.

    Répondre à ce message

  • 4

    Bonjour à tous, et merci pour ce plugin tellement utile, et que j’utilise tellement :)

    J’ai un cas de figure où j’ai besoin de mettre à jour régulièrement la liste déroulante d’une question (de nouveaux items viennent s’ajouter et les plus vieux doivent disparaître). Pour les nouveaux items aucun problème, mais pour ceux que je dois retirer de la liste, le problème qui survient et que quand je souhaite exporter les réponses, celles qui comportent les choix à présent disparu n’ont plus de valeur « textuelle » pour cette question, uniquement la clef. Y a-t-il un moyen de contourner cela ?
    Merci d’avance.

    • Non je ne vois pas trop comment. Si tu les supprimes, ça ne fait plus partie de la config, et dans la base de données, pour les anciennes réponses, c’est la clé technique qui est gardée en mémoire dans la table forcément.

    • C’est bien ce que je me disais, dommage, mais merci pour le retour rapide. Il serait imaginable de créer une nouvelle « saisie » qui bouclerait sur une table de référence ?

    • @Rastpopoulos : on pourrait imaginer une syntaxe pour avoir une équivalence clé/humain conservé mais non affiché. Ou bien un sous paramètre de saisie

    • C’est vrai que si on pouvait ajouter un caractère qui serait interprété comme une exclusion dans la requête, ça serait top. Je creuserai la chose, car la nécessité est bien présente en ce qui me concerne. Encore merci.

    Répondre à ce message

  • 3
    HirisBen

    Bonjour,
    J’ai une question qui va peut-être vous sembler bête, mais je me lance !
    J’ai besoin d’insérer dans un site un formulaire de recherche par sélection du type : je sélectionne un 1er critère dans une liste déroulante A, puis un 2e dans une liste déroulante B et un 3e dans une liste C. Et à la fin je dois obtenir une liste d’articles qui réunissent ces 3 critères. Je n’ai pas trop la notion de comment faire ça. Est-ce que c’est possible d’exploiter la base de cette façon avec Formidable ?
    Et sinon avec quoi est-ce que ça peut se faire ?
    Merci de votre aide et pardon d’avance si je suis hors sujet...

    • Salut,
      clairement pas. Formidable est un plugin pour des formulaires où l’on poste des données (contacts, inscriptions, etc.), pas pour de la recherche.

      Tes critrèes seraient des mot clefs ? ou autre chose ? Si oui, le plugin critères mots est fait pour toi.
      Dans tous les cas je te conseille de demander de l’aide sur les la liste de discussion des utilisateurtrices de spip.

    • HirisBen

      Bonjour,
      Je te remercie de ta réponse. Mes critères ne sont pas des mots clés mais des données de champs extra que j’ai ajoutés aux articles (lieu ; niveau d’étude par exemple).
      Pour la liste des utilisateurs tu veux parler du forum ?
      Merci en tout cas de ta réactivité :-)

    • Alors il faudra construire « à la main » ton formulaires qui appellera un squelttes qui te donnera la réponses.

      pour la liste, je pensais à cela http://listes.rezo.net/mailman/listinfo/spip

      mais il y aussi les ofurms.

    Répondre à ce message

  • Bonjour,

    Il semble qu’il n’y ait pas de Placeholder sur les champs « Date »... serait-il possible d’en rajouter un ? Ce serait bien utile dans certains cas. Merci.

    Répondre à ce message

  • 2

    Je teste ce générateur de formulaire, et il m’a l’air très bien, sauf qu’il me manque des champs importants, la possibilité de saisir des coordonnées gps, et surtout d’afficher des cartes (google map ou open street) avec ses coordonnées et des infos sous forme de bulles sur la carte.
    Des idées pour pouvoir le faire ?
    Merci de votre travail partagé à la communauté.

    • Jaseur Boreal

      Bonjour,

      Les inclusions de cartes et de points géolocalisés dans les contenus SPIP se font avec le plugin GIS 4 qui permet de choisir parmi une multitude variée de couches de cartes.

      Je pense que les concepteurs et utilisateurs de gis vont pouvoir vous aider pour cela.
      Bon week-end

    • Ben pour ça faudrait une saisie « coordonnées » sauf que une saisie en théorie ça enregistre une valeur, alors que là c’est DES coordonnées, une latitude et une longitude, donc je ne sais pas trop quelle est la meilleure approche…

      Par ailleurs, ça sert avant tout à faire des questionnaires, sondages, etc, ce n’est PAS un gestionnaire de contenus, ce n’est pas fait pour créer des fausses tables de contenus, dont on se sert ensuite pour générer des pages etc. On peut tous bidouiller, mais ce n’est pas fait pour ça à la base.

    Répondre à ce message

  • 2

    J’aimerais pouvoir faire quelques requêtes simples — à partir d’une page php — sur la table produite à partir des données entrées par les utilisateurs via un formulaire formidable.
    Mais je n’arrive pas à trouver comment s’appelle la table produite.

    Merci d’avance de tout éclairage.

    Répondre à ce message

  • 2

    Bonjour,
    Avec Formidable 3.12.2 - stable sur un SPIP 3.2.1 [23954] lorsque je fais « exporter toutes les réponses en CSV » j’obtiens un fichier ZIP qui contient un csv avec mes 444 réponses >> OK

    Dans le zip il y aussi les fichiers joints via CVT mais ce uniquement pour les 12 dernières réponses >> pas OK
    Dans le répertoire config/fichiers/formidable/formulaire_2/reponse_xx/fichiers_x j’ai bien les 444 dossiers avec les fichiers joints.
    Donc je peux les rapatrier via FTP mais les admin sans accès FTP sont coincés.

    dd

    • 1. Possible que ce soit un bug parce qu’il y a trop de fichiers, et que l’outil de zip ne fonctionne pas.
      2. Les fichiers sont mis à plas non ? as tu des fichiers avec le même nom ?

    • J’ai réussi à récupérer le tout en important une sauvegarde de la table formulaires_reponses_champs et l’export fonctionne maintenant.

      Je pense que la base a été abîmée suite à une pétouille avec https dans l’espace privé que je n’ai pas encore comprise mais qui c’est résolue d’elle même en 48h (problème de cache sur le serveur ?)
      Il y a des fichiers de même nom mais pas dans les mêmes dossiers a priori.
      Merci

    Répondre à ce message

  • 11

    Le message de retour s’affiche en haut du formulaire après validation. Est il possible de l’afficher à côté du bouton « valider » ?

    • oui, mais cela n’a guère d’interet, car alors tu arrive en bas du formulaire, et tu dois remonter pour le re-remplir.

      il te faut surcharger le squelette « formulaires/formidable.html » (qui se trouve dans le dossier du plugin : tu le recopie dans ton dossier formulaires de ton dossiers squelette, et tu fais tes modifs)

    • Mon idée était d’avoir un message qui permette à l’utilisateur de comprendre que l’envoi a bien été pris en compte car lorsqu’on clique sur « valider » il n’y a rien de visuel permettant à l’utilisateur de savoir si son envoi est bien réalisé (la phrase de retour étant en haut, elle n’est pas nécessairement vue et ne joue donc pas ce rôle de confirmation).

    • normalement, lorsque tu valide, tu est automatiquement remonté en haut du formulaire, justement....
      si ce n’est pas le cas, c’est que tu as un problème ailleurs.

    • ok, merci. En fait il y a effectivement une petite remontée (que je n’avais pas vu).
      Est ce que ce message de retour peut être fonction des données entrées par l’utilisateur dans le formulaire ?
      Sinon comment faire en sorte que l’utilisateur sache qu’il s’agit d’un nouveau message de confirmation lorsqu’il utilise plusieurs fois de suite le formulaire ?

    • c’est étrange de remplir plusieurs fois de suite le même formulaire. Est-ce qu’il n’y aurait pas un souci de conception ?

      Pour le moment non le message de retour est statique, mais je teste si on peut modifier le comportement de formidable pour le personnaliser.

      je te tiens au courant,

    • « c’est étrange de remplir plusieurs fois de suite le même formulaire. Est-ce qu’il n’y aurait pas un souci de conception ? »

      peut-être bien, oui. En fait il s’agit d’inscrire des personnes, un même utilisateur pouvant en inscrire plusieurs. Mon idée de départ était d’avoir un champ pour entrer le nombre de personnes qui allait être inscrites puis d’ouvrir autant de champs que nécessaire. Mais je n’ai pas vu comment réaliser cela via le plugin.

    • a oui je comprend. Alors non malheureusement pour le moment pas possible (enfin il y a peut être un plugin externe qui ferait ceal, mais il n’est pas documenté et je n’ai jamais eu le temps de le tester)

    • cela étant, je pense que si le plugin était fonctionnel, il serait mieux d’avoir un ficher/un enregistrement par personne.

    • Avec la version formulaire rempli plusieurs fois, ça marche pas mal. Mon seul souci est maintenant ce message de retour afin que l’utilisateur sache où il en est.

      merci pour tes réponses

    • La version 3.13.0 du plugin, qui sera bientôt disponible au telechargement/la mise à jour

      permet d’utiliser les @raccourcis@ dans le message de retour

    • Super !
      merci

    Répondre à ce message

  • 5

    Bonjour

    Pourriez m’indiquer la démarche à suivre pour modifier la présentation d’un formulaire (par exemple remplacer le mot « obligatoire » des champs obligatoires par un autre mot) ?

    merci d’avance

    • Ce n’est qu’un petit aspect de la modification de la présentation.

      Mais pour répondre sur ce point :
      -  on peut régler le texte champs par champs
      -  on peut modifier globalement en surchargeant la chaine de langue « info_obligatoire_02 » (mais cela se repercutera sur d’autre formulaires)

      cela étant, je ne vois pas l’interet de changer.

    • Merci. je ne trouve pas comment procéder.
      -  on peut régler le texte champs par champs : à quel endroit ?
      -  on peut modifier globalement en surchargeant la chaine de langue « info_obligatoire_02 » : où trouve-t-on cette chaîne ?
      -  est ce qu’il est possible de redéfinir une page "squelette" pour les modifications à faire ?

      merci d’avance de tout éclairage

    • En fait pour règler le « message d’obligation », je pensais avoir trouvé mais ça ne marche pas à chaque fois (j’ai mis un simple point ., ça laisse « obligatoire » sur certains champs, ça met bien un point dans d’autres cas).

    • -  aucun interet de remplacer par un point qui n’a strictement aucun sens
      -  le reglage du message d’obligation se trouve en dessous de la case qui permet de rendre obligatoire un champ ;-)
      -  il s’agit d’un chaine de langue standard de SPIP. Je t’invite à lire
      https://www.spip.net/fr_article2128.html « mehtode des fichiers de langue »
      -  il se peut que certains types de saisie aient un comportement derogatoire, si tu peux me dire lesquels, on peut regarder ce qu’il en est.
      -  pas compris pourquoi tu veux faire un squelette

    • « - aucun interet de remplacer par un point qui n’a strictement aucun sens »

      dans un formulaire où tous les champs sont obligatoires, c’est juste un peu lourd d’avoir (obligatoire) sur tous les champs. Une phrase le précisant au départ me semblait plus adaptée.

    Répondre à ce message

  • 2

    Bonjour,

    Avec la mise à jour vers la version actuelle, j’ai eu sur 2 sites en SPIP 3.1.8 SVN :

    Erreur SQL 1054
    Unknown column ’resume_reponse’ in ’field list’
    SELECT id_formulaire, traitements, resume_reponse FROM spip_formulaires
    /var/www/_mutualisation_31/www/plugins/formidable/formidable_administrations.php formidable_migrer_resume_reponse() sql_select() ; 218

    • bizarre, tu devais avoir une version de la base pas correct avant la maj...

      a priori pas hyper grave, puisque le but de la fonction était justement de recuperer le contenu de la colonne pour la mettre ailleurs.

    • Je repense à ce truc. C’est quand même hyper bizarre. tu aurais par hasard un dump de la base avant la mise à jour ?

    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