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,
    quel serait la balise à autoriser pour CK editor svp ?
    Merci

    • 2 h le temps de comprendre que c’était CK editor qui bloquait et de chercher le bon élément à noter et... je viens de trouver :

      rajouter dans option avancée : id

    Répondre à ce message

  • 1
    mrskater

    Bonjour,
    mon site est en spip 2 et utilise le plugin Formidable. Je souhaiterais pourvoir choisir l’adresse de réponse de l’accusé de réception. Car actuellement c’est l’adresse de l’admin qui a créé le formulaire qui apparait. J’ai essayé de changer l’adresse de du compte admin mais ça ne change rien. J’ai également créé un nouveau formulaire à partir du compte admin avec la nouvelle adresse mais là aussi ça ne changer rien.
    Auriez-vous une astuce ?

    Merci par avance.
    Mathieu.

    • Ce n’est pas le compte d’un utilisateur mais le compte configuré pour l’envoi des courriels, et qui par défaut est l’adresse du webmaster (dans « Identité du site »), qui elle-même par défaut est l’adresse de l’utilisateur qui a installé le site.

      À configurer donc soit explicitement dans le plugin Facteur si on l’utilise, soit dans Identité du site.

    Répondre à ce message

  • 4
    denkam

    Bonjour,

    Tout d’abord bravo pour ce plugin très intéressant.

    Pour ma part, l’installation et son fonctionnement se passe très bien.

    j’ai juste une remarque qui a été déjà précisée dans le forum en tout début et qui n’a jamais eu de réponse. Puis j’ai été étonné de ne voir personne l’évoquer par la suite.

    -  > Quand on valide un formulaire en ayant oublié de remplir un champ obligatoire : tous les champs se retrouvent vidées lors du réaffichage du formulaire avec la précision comme quoi c’est obligatoire. L’utilisateur n’a donc pas intérêt à se taper la saisie de son formulaire pour se voir tout refaire.

    je vais essayer de voir comment régler ce problème quitte à modifier le code mais si vous avez la solution, merci de votre grande gentillesse de la faire partager.

    Bonne journée
    Denkam

    • Si personne ne l’a ré-évoqué, c’est peut-être parce que ça ne fait pas ça « dans ce plugin » mais seulement « chez deux personnes ». :)

      Car : chez-moi-ça-marche. ©

      Faut trouver un moyen de reproduire le problème pour pouvoir le résoudre.

    • denkam

      Merci d’avoir répondu rapidement.

      J’ai creusé un peu plus l’affaire. Il s’avère que j’ai la version 5.1 de PHP.

      Mon problème rejoint en fait plusieurs signalement dans le forum avec les problèmes de « sans réponses » affiché dans résultat alors que le reste fonctionne (enregistrement en base, et envoies des données par mail).

      Je vais activer l’affichage des erreurs PHP pour voir si c’est mineur à corriger ou pas car je ne me vois pas demander une MAJ de PHP sur le serveur d’entreprise alors que je ne suis pas le seul programme dessus.

      Bonne journée.

    • Ah, sans être sûr peut-être bien que ça vient de là, car il me semble que la 5.1 est passablement buguée et qu’elle n’a d’ailleurs durée que très peu de temps. Il vaut mieux utiliser au moins la 5.2 je crois.

    • denkam

      C’est confirmé.

      Suite au passage à la version 5.2 minimum (dans mon cas présent le 5.3) -> le probleme :
      -  des champs « sans réponse »
      -  et le probleme du formulaire qui se vide lors d’un oubli de champs obligatoire

      DISPARAIT.

    Répondre à ce message

  • 2

    Bonjour,

    Petit bug de structure HTML qui c’est glissé dans le code :

    > formulaires > formidable.html > ligne 8 > la fermeture de balise </h3> devrait être avant la fermeture du crochet.

    Bonne journée,
    françois

    Répondre à ce message

  • 5

    Bonjour,

    Où puis-je trouver de la doc pour connaître la syntaxe à utiliser dans le fichier formulaire_IDENTIFIANT_accuse.html ?

    Merci

    • Il n’y a pas de documentation spécifique pour ça. Ya le code de l’accusé par défaut, à modifier au besoin.

    • D’accord. Cependant, l’accusé par défaut contient seulement ceci pour afficher les réponses :

      #VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}}

      Aurais-tu un exemple pour afficher une réponse en particulier ? Ainsi, je pourrais construire le courriel que je veux, avec les réponses de mon choix.

      Merci pour ta réponse rapide !

    • peetdu

      Je découvre avec bonheur ce plugin. Yes !

      Je me joint à la demande de maxCSA : dans la page Configurer le formulaire, il existe un champ Message de retour qui peut être renseigner. C’est pratique pour personnaliser le message qui sera affiché à l’utilisateur après l’envoi d’un formulaire valide.

      Toutefois, c’est le même contenu qui est utilisé dans le message du mail envoyé à « l’envoyeur ». Or ces deux messages peuvent (et doivent dans certains cas) être différents.

      A t-il été envisagé de rajouter un champ Message de l’accusé de reception dans la page « Configurer les traitements » ?

      Si l’idée vous paraît bonne, je veux bien donner un coup de main....

    • Dans certains cas ça peut être différent, mais dans la majorité des cas le même message est suffisant. Pour les cas à part, l’accusé de réception peut déjà être personnalisé, soit pour tous les formulaires (en surchargeant le squelette par défaut), soit un par un (en ajoutant l’identifiant dans le nom du fichier, comme expliqué dans la doc plus haut). Donc cela permet de personnaliser l’accusé pour les quelques cas où on veut un truc différent.

      Ça me paraîtrait dommage d’alourdir l’interface avec un champ supplémentaire utilisé pour seulement peu de cas, de temps en temps.

    • peetdu

      Ok. J’ai effectivement résolu la question avec une simple surcharge. Merci

    Répondre à ce message

  • 2

    Salut, pour les champs « date » est-ce qu’il serait possible d’avoir une extension plus grande que 2003-2023 (typiquement pour date de naissance)

    merci

    • Les saisies ne sont pas du ressort de ce plugin mais du plugin Saisie. Tu parles de quelle saisie d’ailleurs (je crois qu’il y en a plusieurs pour les dates en plus, je ne sais plus) ?

    • Bonjour
      as tu trouvé la solution pour étendre la plage des dates ?
      J’ai aussi besoin de pouvoir définir des dates de naissances.
      J’ai parcouru les fichiers des plugins Saisie et Formidable mais je n’ai pas trouvé grand chose en rapport avec Date :(

    Répondre à ce message

  • 10

    Bonjour,
    je n’arrive pas à avoir le choix de Destinaites dans la liste déroulante. Elle reste vide quoique je fasse dans la configuration de mes champs. De plus comment utiliser une balise de type @nom@ dans les Destinataires supplémentaires ? Actuellement cela génère une erreur de format, le champs doit etre configuré pour tester le pattern d’un email.

    Je souhaite donner au visiteur la possibilité de sélectionner la personne à contacter dans une liste.

    Merci

    • Help Help Help ! :D

    • Chez-moi-ça-marche. ©
      Je sélectionne un ou plusieurs auteurs dans la config du champ, et ensuite ça fait une liste.

      Pour les destinataires supplémentaires, c’est une suite d’adresses email séparées par des virgules. Mais c’est marqué dans l’explication du champ de config je crois.

    • Pour ma part le champs reste désespéremment vide.
      J’ai créé dans mon formulaire un champs de type lsite , dans lequel j’ai attribué des clef / label contenant des email / nom de personne.

      Logiquement une fois le formulaire validé, je devrais retrouver ce champs dans la liste Destinaire non ? Cela permettant au visiteur de sélectionner dans cette liste le nom du contact.

    • l’autre screenshoot

    • screenshoot

    • J’ai créé dans mon formulaire un champs de type lsite , dans lequel j’ai attribué des clef / label contenant des email / nom de personne.

      Euh non non, il n’a jamais été question de ça dans ce plugin. Il y a un type de champ nommé explicitement « Destinataires » et qui permet de choisir parmi des utilisateurs du site (quitte à en créer pour ça qui ne serviront à aucun humain particulier).

    • alors je n’ai pas bien compris la notion de : Choisissez le champ qui correspondra aux destinataires du message. :(
      Du coup si je souhaites proposer le choix du destinataire, il me créer plusieurs auteurs, c’est bien ça ? Actuellement j’ai deux auteurs sur ce site, mais le champs Destinataires, dans Configurer les traitement est toujours vide.

    • je cherche toujours :(

    • Ben j’ai déjà expliqué précédemment, il faut ajouter un champ de type Destinataires pour que les gens choisissent.

    • Merci, j’ai enfin compris et je viens de découvrir le champs destinataire... désolé pour la perte de temps :s

    Répondre à ce message

  • 2

    Bonjour,
    Je dois sauvegarder ma base de données et comme j’ai autrefois utilisé forms & tables je souhaite connaitre les tables à sauver pour le plugin formidable ?
    Merci de votre compréhension :)
    JPA

    • spip_formulaires***

      Cela dit, quand on sauve une base, c’est mieux de procéder par exclusion que par inclusion. Cad pas dire je vais sauver cette table + cette table + etc. Mais plutôt sauver TOUTES les tables, sauf telle ou telle exceptions (par ex toutes sauf la table des stats qui prend beaucoup de place). Le mieux étant de tout sauver.

    • ok, complétement d’accord : j’aurais pu demander qu’elles sont les tables de Forms & Tables afin de les décocher mais c’était peut être gonflé de demander cela ici ? ;-)
      (Les forums sur forms et tables ne sont plus réactifs)...
      Donc si quelqu’un peut répondre à cette question reformulées , qu’il en soit remercié !!!

    Répondre à ce message

  • 1
    olivier

    hello,
    ce plugin fonctionne-t-il sans jquery ?

    • Dans la partie publique ? Si vraiment tu le souhaites je suppose que oui, ça génère un formulaire basique comme SPIP quoi. Par contre pas de validation en AJAX du coup.

    Répondre à ce message

  • 13

    Bonsoir, et merci encore pour ce super boulot !
    Je viens de passer de F&T à Formidable parce que je n’arrivais pas à mes fins, mais je rencontre deux problèmes :
    Je souhaiterais générer un pdf en récupérant les valeurs d’un enregistrement juste après la validation du formulaire pour la transmettre à Spipdf.
    J’ai tenté un affichage conditionnel d’un bouton récupérant ces valeurs dans le fichier modeles/formulaires_reponse.html avec le code suivant :

    <B_formulaire>
         <a href="[(#URL_PAGE{spipdf}
         |parametre_url{spipdf,reservation_pdf}
         |parametre_url{id_article,#ID_ARTICLE}
         |parametre_url{id_formulaires_reponse,#ID_FORMULAIRE_REPONSE}
         |parametre_url{nom_fichier,resa_#TITRE#ID_FORMULAIRE_REPONSE})]">
         >> T&eacute;l&eacute;charger au format PDF
    </a>
    <BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
    #VOIR_SAISIES{(#SAISIES|unserialize), #GET{valeurs}}
    </BOUCLE_formulaire>

    Mais rien, pas d’affichage, même après avoir vidé le cache manuellement :-/
    Donc :
    1°) Comment faire un affichage conditionnel (si réponse ok) ?
    2°) La syntaxe des balises est-elle correcte (ID_FORMULAIRE(S)_REPONSE avec ou sans « s »)

    L’environnement : PHP 5.3.21, SPIP 3.0.5, Formidable 1.3.5

    Merci d’avance pour l’aide ou les conseils :)

    • Je me réponds (fatigué hier !), j’ai mon affichage en utilisant formidable.html, je récupère l’id du formulaire, mais je n’arrive pas à transmettre les valeurs saisies...
      Peut-être passer par un inclure ?

      [(#EDITABLE|non)
              [(#ENV{formidable_afficher_apres}|=={valeurs}|oui)
      		<a href="[(#URL_PAGE{spipdf}
      		|parametre_url{spipdf,reservation_pdf}
      		|parametre_url{id_article,#ENV{id_article}}
      		|parametre_url{id_formulaire,#ENV{id}}
      		|parametre_url{valeurs,#ENV*{valeurs}}
      		|parametre_url{nom_fichier,resa_#ENV{id}})]">
      		>> T&eacute;l&eacute;charger au format PDF</a>
      
                  #VOIR_SAISIES{#ENV*{_saisies},#ENV}
              ]

      Un coup de pouce serait vraiment bienvenu...
      Merci

    • « valeurs » c’est un tableau, qui lui même d’ailleurs peut-être contenir des tableaux (pour les cases à cocher par exemple). Donc tu peux pas le transmettre comme ça dans une URL.

      C’est plutôt dans ton squelette qui génère le PDF qu’il faut refaire la boucle qui récupère les valeurs (tu copies colles) pour ensuite en faire ce que tu veux. Donc tu passes que l’identifiant de la réponse dans l’URL.

    • Merci de ta réponse RastaPopoulos !
      Oui j’aimerais bien passer l’id de la réponse, mais comment ?
      J’ai essayé avec

      		|parametre_url{id_formulaires_reponse,#ENV{id_formulaires_reponse}}

      mais je n’obtient rien...
      Une indice de plus ;-)
      Allez...

    • #ENVid me transmet l’id du formulaire, en l’occurrence 1
      Faut-il que je le récupère avec une boucle ? Auquel cas il faut que je passe par un inclure...
      Merci de ton aide...

    • Ben je vois pas comment le modèle par défaut pourrait marcher s’il n’y a pas #ENV{id_formulaires_reponse}. S’il marche, c’est que cette variable existe, puisque c’est elle qui est utilisé dès le début dans la boucle :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/formidable/trunk/modeles/formulaires_reponse.html

    • Effectivement, mais mon code se trouve dans formidable.html ce qui me permet d’afficher un bouton pour générer le pdf à côté de la réponse, d’où ma question précédente...

    • Ah ben oui mais si tu donnes pas toutes les informations... Au début tu disais « dans le fichier modeles/formulaires_reponse.html » !

      Dans le squelette du formulaire tu n’as pas l’identifiant de la réponse. Enfin je ne crois pas, je ne vois ça nulle part dans le code.

    • Donc pas moyen de récupérer l’id_formulaires_reponse ?
      Pourtant on a bien #VOIR_SAISIES{#ENV*{_saisies},#ENV} qui affiche la réponse à cet endroit...
      Arghhh !

    • Ben oui, puisqu’on vient de poster le formulaire, toutes les valeurs sont directement dans le #ENV (qu’on ait enregistré les réponses en base ou pas).

    • Bon désolé d’être un boulet mais no comprendo :-(
      Je recapitule ; mon code dans formidable.html :

          [(#EDITABLE|non)
              [(#ENV{formidable_afficher_apres}|=={valeurs}|oui)
      		<a class="montserrat blanc" href="[(#URL_PAGE{spipdf}
      		|parametre_url{spipdf,reservation_pdf}
      		|parametre_url{id_article,#ENV{id_article}}
      		|parametre_url{id_formulaire,#ENV{id}}
      		|parametre_url{id_formulaires_reponse,#ENV{id_formulaires_reponse}}
      		|parametre_url{nom_fichier,resa_#ENV{id}})]">
      		>> T&eacute;l&eacute;charger au format PDF</a>
      
                  #VOIR_SAISIES{#ENV*{_saisies},#ENV}
              ]

      En var_mode=debug dans le #ENV de formulaire je n’ai pas id_formulaires_reponse...
      Peux-tu être plus explicite stp, ça deviendrait presque urgent ?
      Merci

    • RastaPopoulos, j’insiste car j’en ai vraiment, vraiment besoin...
      Peux-tu m’indiquer comment récupérer la variable id_formulaires_reponse à partir de formidable.html
      Pour l’instant si je fait id_formulaires_reponse,#ENV{id} ça me donne l’id du formulaire (1) et non l’id de la réponse qui devrait-être 70.
      Par avance, merci !

    • Pourtant il a expliqué déjà... Bon, dans le fonctionnement des formulaires, les valeurs sont dans l’environnement pour la vérification et le ré-affichage : c’est pourquoi tu les re-vois... et jusque-là tu n’avais pas de id_formulaire_reponse !
      Ce n’est qu’après ça qu’elle sont enregistrées (et un id_formulaire_reponse attribué) ; et en ce moment t’es plus dans le formulaire ou alors un autre... donc toujours pas de id_formulaire_reponse héhé
      (en gros l’approche consistant à mettre la charrue avant les boeufs n’est pas bonne ; on n’est vraiment pas au bon endroit pour faire ça)

    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