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

  • 10

    Bonjour,

    J’ai bien vu dans la doc ci-dessus un modèle pour un mail d’accusé de réception pour l’internaute... mais comment :
    -  Formidable détermine à qui l’envoyer ? Comment il détermine le mail de l’internaute ? Je ne vois nul part une liaison sur un des champs du formulaire.
    -  comment on active cette fonction pour un formulaire ? Ou bien pour tous les formulaires ?

    Merci de votre aide !

    Julien

    • J’ai bien trouvé cette fonction avec un champ de type destinataire, pour envoyer un mail avec le contenu vers un rédacteur ou administrateur... mais vers un l’internaute qui vient de remplir ce formulaire ?

    • Ben c’est dans la config du traitement « envoyer par mail », il y a une case à cocher « accusé de réception » pour ça, et dans cette config on indique quel est le champ qui contient le mail du visiteur.

    • J’ai bien la case « Envoyer aussi un courriel à l’adresse de l’envoyeur avec un message de confirmation. » qui est cochée, mais en dessous il y a : « Sujet de l’accusé de réception » et rien sur le mail du visiteur...

      Serait-ce un bug ? mais je viens de l’installer, et tout le reste marche super !

      Merci de votre aide. Et bravo pour ce plugin si vous en êtes l’auteur !

    • Oui, j’ai bien la case cochée, mais pas de champ pour indiquer le champ qui contiendrais le mail de l’internaute.En dessous, il y a directement : « Sujet de l’accusé de réception ».

      Est-ce un bug ? Mais tout le reste marche bien.

      Merci de votre aide.

    • « Courriel de l’envoyeur : choisissez le champ qui contiendra le courriel de l’envoyeur »

    • Je confirme, je n’ai pas ce champ. Son affichage peut-il dépendre d’un autre réglage ? Du facteur ? Autre ?

    • Tu mens. :)

      Je le vois dans ta capture d’écran, tout en haut. L’option qui permet de définir très clairement quel est le champ du formulaire qui contient l’email de l’envoyeur, celui qui est en train d’écrire le message dans le formulaire.

    • Cela ne fait que 2h que je scrute cet écran... comment puis-je ne pas avoir vu ce champ ?

      Tu es bien bon de prendre (perdre ?) du temps pour nous répondre !!

      Merci encore !

      Et en bonus, voici un site sur les prisons fait en spip qui change un peu : www.carceropolis.fr (tu n’auras pas complètement perdu ton temps !)

    • Un peu lourd à charger, mais sinon carceropolis est vachement bien… Étonnant de faire ça en Spip !

    • Au contraire, il n’y a pas assez de sites comme cela sur SPIP.

    Répondre à ce message

  • 2
    Sonia JOHNSON

    Bonjour,

    j’ai installé le plugin formidable il marche à merveille. le seul problème c’est que lors de l’envoi du mail il affiche le message suivant : « Une erreur est survenue lors de l’envoi du courriel. » Pourtant l’inscription est bien faite dans la base de données mais les destinataires ne reçoivent pas le message. J’ai essayé d’ajouter un champ destinataires mais cela ne s’affiche pas sur le site. J’ai essayé également d’ajouter des destinataires supplémentaires ça na marche toujours pas.

    Quelqu’un pourrait m’aider ?

    Merci

    • Ça veut dire que c’est la configuration d’envoi de courriel qui n’est pas bien faite ou pas faite du tout sur ton serveur. Il faut soit avoir la fonction mail() de disponible, soit configurer un serveur SMTP à l’aide du plugin Facteur.

    • Sonia JOHNSON

      Pourtant j’utilise Form & table sur un site qui marche correctement pour l’envoi de courriel.

    Répondre à ce message

  • bonsoir
    voici les messages que j’ai après l’installation de formidable

    1) à l’accueil de l’espace privé
    Erreur dans les plugins : ecrire/C :\Program Files\EasyPHP-12.0\www\cite_du_roman/plugins/auto/formidable_1_0/formidable_autorisations.php

    2) quand je cliques sur Edition/formulaires
    Erreur SQL 1146
    La table ’webtforliv.spip_formulaires’ n’existe pas
    SELECT ’’, formulaires.id_formulaire, formulaires.titre, formulaires.identifiant FROM spip_formulaires AS formulaires ORDER BY formulaires.titre

    je suis sur spip 3

    Répondre à ce message

  • 2

    Bonjour,
    En premier lieu, un tout grand merci pour ce plugin vraiment formidable. Quelle facilité pour générer des formulaires ! J’ai deux questions.

    1- La première concerne le comportement visuel des champs obligatoires.

    Admettons que tous mes champs soient obligatoires et que pour chacun d’eux, j’ai encodé un message d’obligation spécifique dans l’onglet « validation ». Dans la partie publique, je tente d’envoyer le formulaire sans rien remplir.

    Il commence par m’entourer tous les champs de type « ligne » ou « bloc » de texte en rouge, en ignorant les autres, et affiche une bulle contenant le texte « Please fill out this field » au niveau du premier. Je le remplis, je tente de renvoyer, la bulle s’affiche alors sur le champ ligne ou bloc suivant, avec le même message d’erreur.

    Ce n’est que lorsque tous mes champs ligne ou bloc sont remplis qu’il semble se préoccuper des autres types de champs. Pour ceux-ci, il affiche toutes les erreurs qui subsistent d’un coup, avec le message personnalisé que j’ai encodé et dans le style css voulu. En un coup d’oeil, on voit ce qu’on a oublié.

    En fait, j’aimerais qu’il ait ce comportement pour tous les champs, y compris de type ligne et bloc, et surtout qu’il tienne compte de mes messages personnalisés et n’affiche pas celui par défaut en anglais. Comment faire ?

    2- La seconde question concerne les mails générés.

    Ceux-ci reprennent le message que j’ai déterminé, suivi de tous les champs et leurs réponses en une longue colonne pas très belle. Où et comment puis-je modifier le look des mails ?

    J’aimerais qu’il m’affiche chaque fois le nom du champ et la valeur encodée sur une même ligne (et idéalement - si possible - ne pas afficher le nom des groupes de champs qui fait double emploi avec la valeur que l’on y encode, qui n’est qu’un titre).

    • Pardon, j’ai oublié : je suis sur spip 3.0.5 (avec la version 1.3.4 du plugin, donc)

    • crazyspip

      Personne ne peut m’aider pour les messages d’erreur des champs obligatoires ou bien ma question n’est pas claire ?

      Arf, pour les mails, désolée : je viens de voir qu’il y a une explication dans les explications ci-dessus. #paslesbonneslunettes

    Répondre à ce message

  • 2

    Bonsoir,

    Pour un formulaire avec un item que je fais vérifier par une expression régulière, en cas d’erreur de saisie par l’internaute, s’affiche :

    Le format de la chaîne n’est pas valide.

    Je n’ai pas trouvé dans le fichier :
    Formidable/lang/formidable_fr.php l’endroit où modifier cette phrase « Le format de la chaîne n’est pas valide. »
    Elle se trouve certainement cachée ailleurs...
    Oui mais-où ?

    Merci
    Luc

    • Dans le plugin Vérifier. Ce qui serait cool serait d’ajouter une option à ce type de vérification pour surcharger la chaîne d’erreur par défaut. Ajouter une option dans le YAML qui décrit ce type de vérification, et dans le PHP l’utiliser si elle est remplie. Bonne idée. :)

    • Merci...

      Vu, changé et placé dans mon squelette/lang.

      C’est vrai qu’une option pour changer ce message serait bien... pour ma part... je ne sais pas faire...

      Luc

    Répondre à ce message

  • Bonjour !

    Grâce à ce formidable plugin, j’ai mis en place sur mon site un formulaire destiné à prendre en charge des pré-réservations. Ces réservations sont faites place par place : une personne enregistrée peut réserver 1 à n places.

    Est-il possible de mettre en place un système désactivant les champs déjà cochés par les précédentes personnes ? Je n’ai pas trouvé de réponse pour cette éventuelle option. Si cela n’existe pas, est-ce une fonctionnalité envisagée ?

    Merci !

    Répondre à ce message

  • Bonjour,
    J’ai du mal avec ces formulaires ils n’apparaissent toujours pas dans l’espace publique en local.
    J’ai essayé avec spip 2 et spip 3 sous xampp sur wampp etc.
    Toujours rien,

    <?php include_once("/opt/nursit/sys/home/nursit/matrice/public/4.2/07/spip/ecrire/balise/formulaire_.php"); if ($lang_select = "fr") $lang_select = lang_select($lang_select); inserer_balise_dynamique(balise_FORMULAIRE__dyn(arguments_balise_dyn_depuis_modele('FORMULAIRE_TEST'), '1'), array('', '', '', '', 'fr', '1')); if ($lang_select) lang_select(); ?>

    ne donne rien c’est désespérant !

    Répondre à ce message

  • Bonjour, comment rendre possible à un administrateur restreint de créer un formulaire ???...
    SPIP 2.1.19 [19922] / Plugin Formidable 0.6.7 [66723]

    Merci.

    Répondre à ce message

  • 1

    Bonjour,

    J’ai un petit soucis sur l’utilisation du plugin et je pense que ce problème vient de ma version de php.
    En effet j’ai la même installation de spip 3.0.5 (mode auto) + Formidable (faite aujourd’hui) sur deux serveurs et dans un cas mes formulaires sont vide (ie il n’y a aucun champ), pas dans l’autre.
    Je n’ai aucun message d’erreur, ni à l’installation, ni lors de la création des formulaires.
    les seules choses qui diffères sont :
    Formulaire vide <=> formulaire OK
    OS RedHat 5.8 <=> ScientificLinux 6.3
    httpd 2.2.3 <=> 2.2.15
    mysql 5.0.95 <=> 5.1.66
    php 5.1.6 <=> 5.3.3

    Y a t’il des versions mini à utiliser ? Si oui lesquelles .

    Merci de votre aide.

    • Bonsoir

      J’ai eu un problème très similaire récemment. Et je me suis aperçu qu’il s’agit d’une différence de traitement par SPIP au niveau de la balise #TEXTE* ou #TEXTE**.

      Regarde dans ton squelette si tu as des * après cette balise. Fais des essais au pif et vois si ça tombe en marche.

      J’ai toujours pas compris la cause origine du bug mais j’ai réussi à supprimer les conséquences.

    Répondre à ce message

  • Forcer les valeurs des champs

    Bonjour

    Pendant la création d’un formulaire, il est possible d’indiquer une valeur par défaut à un champs de type texte.

    Comment faire pour que cette valeur soit le résultat d’un calcul ?

    J’ai un plugin perso qui fait des calculs à partir de données saisies dans FORMIDABLE. C’est le résultat du calcul que j’aimerai forcer dans un champ.

    MERCI

    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