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

  • 2

    Re-Bonjour,

    Encore une question !

    Mon formidable formulaire de contact se trouve au bas d’une page assez haute... Lorsque l’on l’utilise, on se retrouve en haut de la page et le formidable formulaire n’est plus visible... Ce qui n’est pas heu... formidable !

    Serait-il possible de l’ajaxer ? Si oui, comment ?

    Pour info, dans l’adresse de retour, j’ai essayé de mettre une ancre ( genre #monancre ), mais ça n’a pas amemé la page à l’ancre...

    Ceci-dit, je crois que je préfèrerais l’ajaxer en sachant que ce formidable formulaire est inclus dans un article...

    Merci d’avance de votre aide !

    • Tout comme n’importe quel formulaire de SPIP (oui n’importe lequel !), il suffit de l’inclure dans un bloc ayant la classe « ajax » pour qu’il se lance en AJAX. Magique. :D

      Dans un squelette :
      <div class="ajax">#FORMULAIRE_TRUC</div>
      
      Dans un contenu :
      <div class="ajax"><formulaire|truc></div>
    • Merci ! Je teste ça tout de suite !
      Tu es formidable RastaPopoulos !

      Pour info, je venait d’essayer <formulaire|truc|ajax>...
      Peut être une piste à creuser ;-)

      Encore merci et bonne journée !

    Répondre à ce message

  • 2

    Bonjour,

    J’ai utilisé Formidable pour un formulaire de Contact.
    J’ai choisi d’enregistrer les réponses.
    J’ai fait quelques essais, les réponses sont bien en enregistrées... Mais avec le statut ’Publié en ligne’...
    Est ce que cela veut dire que l’on peur rendre public ces réponses via un squelette à développer soit même ( ce qui peut avoir sont intérêt ! ) ou bien sont elles visibles via un squelette déjà implémenté dans le plugin ? Le dernier cas serait gênant pour nous... Les gens nous contactent, nous et pas la terre entière ! D’autant plus que leurs emails est obligatoire... On veut pas non plus les répandre...

    Merci d’avance de vos éclaicissements à ce sujet !

    • Non il n’y a aucun squelette de réponses pour le site. Le statut permet de voir ces réponses si on boucle publiquement sur la table des réponses, alors que sinon, non. Mais c’est à chacun de le faire.

    • Super ! Merci de ta réponse si rapide !

    Répondre à ce message

  • 6

    Bonjour,
    Je ne sais pas pourquoi mais le plugin ne veut pas marcher malgré l’installation de tous les plugins nécessaires (facteur, vérifier, saisies, yaml, bonux) sous mon site en spip 3.
    J’obtiens ce type de message d’erreur sur la page même du formulaire : Fatal error : Unsupported operand types in [...]/plugins/formidable_1_0/formulaires/formidable.php on line 54.
    Quelqu’un aurait déjà eu ce type d’erreur et pourrait me donner un petit coup de pouce ?
    Merci bien

    • Mauvais version de PHP ?

    • Bonjour
      J’ai le même problème...
      Mon site est sous php version 5.1.3RC4-dev
      Y-a-il une solution ?
      Merci d’avance

    • Changer de version de PHP ou changer d’hébergeur, ya pas d’autre solution rapide, je crois.

    • Quelle version de php est compatible ?
      Merci

    • Au minimum la 5.2 il me semble.

    • Merci pour l’aide, et pour la rapidité !! Je vais étudier çà, mais étant donné que c’est un site qui « tourne » déjà puisqu’en ligne depuis un moment, je vais peut-être pas me lancer dans un déménagement d’hébergeur. Je vais voir, mais encore merci pour cet éclairage !

    Répondre à ce message

  • Bonjour et merci pour ce plugin. Je souhaite l’utiliser sur un site d’école ais j’ai un soucis. Une fois le formulaire valider, je retombe sur une page blanche et je ne reçois rien, ni l’envoyeur.

    La page blanche correspond bien à l’adresse URL où il y a l’image.
    J’ai demandé que cela affiche les valeurs saisie.

    L’uRL en question : http://www.ac-grenoble.fr/ecole/74/saint-cergues/spip.php?article295
    Merci du coup de main

    Jérôme

    Répondre à ce message

  • Bonjour,

    Lors e l’exportation yaml tous mes accents sont codés html. Dans phpmyadmin, le texte est bon. Comment faire ? Que faire ?

    Merci

    Robert

    Répondre à ce message

  • 1
    Renée Picard

    Sur un site bilingue français english, le formulaire affiche bien required mais si un champ est oublié il affiche en français Veuillez compléter ce champ. Où puis-je aller traduire cela ?
    Merci
    RP

    • Euh ben je sais pas, c’est toi qui l’a mis cette phrase non ? Ça ne me dit rien comme faisant partie des chaînes par défaut.

    Répondre à ce message

  • 13

    Bonjour,
    quand j’envoie un message à partir du formulaire, après avoir cliquer sur valider ce message s’affiche sur le site « Votre demande d’inscription a bien été prise en compte, nous vous répondrons dans les meilleurs délais. Merci de noter ces références : » Alors ma question ou je peux trouver le fichier qui gère ça ?...Merci

    • Merci pour la réponse,
      Le fichier qui gère ce message de confirmation d’envoie à savoir « Votre demande d’inscription a bien été prise en compte, nous vous répondrons dans les meilleurs délais. Merci de noter ces références : »

    • Ben ya pas de fichier précis qui gère ça. C’est une phrase à configurer dans les champs de chacun des formulaires. Ya une phrase par défaut quand cette config est vide. Et quand elle est pas vide c’est ta phrase qui est prise en compte.

    • Merci pour la réponse, alors c’est quasi impossible de récupérer l’id_formulaires_reponse et la date et heure de l’envoie juste après cette phrase ?

      Une autre question dans le fichier formulaire_email je peux récupérer #ID_FORMULAIRE mais pas

      #ID_FORMULAIRES_REPONSE est ce normal ?

    • Pour le message de retour du formulaire, le seul moyen vraiment propre serait de s’insérer dans le pipeline « formulaire_traiter » pour ce formulaire là et de modifier la valeur de « message_ok ». Mais pour ça faut le coder en PHP évidemment.

      Pour l’id de la réponse dans les mails (d’envoi ou d’accusé de reception) c’est tout à fait logique : ce sont deux traitements totalement différents et on peut parfaitement activer l’envoi par mail SANS qu’il n’y ait d’enregistrement en base (ou inversement).

      Faudrait aller chercher la dernière réponse en base (mais si 4 personnes répondent en même temps je sais pas si c’est fiable). Ou bien faire une vérif avec un des champs, comme l’email par exemple.

    • Merci pour cette réponse, je pense que je laisse tombé pour le message de retour :) mais j’essai de recupérer l’id_formulaires_reponse avec cette boucle

      <BOUCLE_reponse(spip_formulaires_reponses){id_formulaire=3}{par date}{inverse}{0,1}>
      
      formulaire numéro: #ID_FORMULAIRES_REPONSE
      
      </BOUCLE_reponse>

      Mais il prend le dernier enregistré dans la base et non celui que j’envoie et j’avoue que c’est logique :) Si on pouvait retardé la notification je pense que serait mieux

    • Ouais, on pourrait remplacer l’appel à « envoyer_mail » par une programmation de la même fonction (avec job_queue_add) mais disons… une minute plus tard par exemple, le temps que les autres traitements se terminent (que ce soit l’enregistrement en base ou d’autres persos).

      C’est une bonne idée.

    • a priori les traitement se font dans un certain ordre nom ? pas en // ?

      Donc est-ce qu’on ne pourrait pas envisager de préciser l’ordre des traitements. Par ex 1. Enregistrement en base 2. Courriel ?

    • Ça fait un peu usine à gaz si on doit spécifier ça. Et n’importe qui peut ajouter des traitements, chez lui ou dans des sous-plugins. Que ce soit spécifié par le dev ou pire par une interface par l’utilisateur, ça me parait lourd.

      Là pour les emails, il suffirait juste de programmer envoyer_mail() 1min ou 2 plus tard, au lieu de l’appeler directement. En plus sur des gros sites (ou sur les mauvais hébergements), c’est toujours mieux que les choses soient programmées, plutôt qu’appelées telles quelles, parce que ça rend la réponse plus rapide.

    • effectivement sur le second pt. Mais est-on sûr que le nombre de visite d’un site sera suffisant pour lancer le cron et du coup la tâche.

      Et quid des cas où il y a plusieurs enregistrements en // ? En fait, il faudrait que chaque validation de formulaire est un identifiant numero unique, indépendament du traitement effectué.

    • Bonjour,
      Comme ma boucle prenait le dernier enregistrement et non celui que je suis entrain d’enregistré j’ai incrémenté +1, alors la boucle devient :

      <BOUCLE_reponse(spip_formulaires_reponses){id_formulaire=3}{par date}{inverse}{0,1}>
      
      Réponse de formulaire n° [(#ID_FORMULAIRES_REPONSE|plus{1})]
      
      </BOUCLE_reponse>
    • Ah ouais @maieul pourquoi pas. On pourrait générer une valeur unique avant d’appeler les traitements et l’ajouter au tableau des arguments envoyés à tous les traiter/truc. Mais faudrait qu’il soit enregistré dans spip_formulaires_reponses aussi, en plus de l’id SQL.

    • Oui ... genre un hash des données + date d’envoi.

    Répondre à ce message

  • 4

    Comment fait-on pour extraire un résultat (valeur) du formulaire et l’afficher dans le formulaire-accuse ou _email en dehors de #VOIR_SAISIES... qui affiche tous les résultats ?
    Sinon bravo et merci pour ce formulaire !!

    • #VOIR_SAISIE{type,nom}

    • Oui mais pour VOIR_SAISIE faut la valeur aussi dans l’environnement, c’est un truc générique à Saisies. Là pour l’instant maintenant tout de suite, il n’y a pas de fonctions ou balises « facilitatrices » pour avoir les réponses d’un champ précis en un seul appel. Pour le moment faut boucler sur la réponse en question, puis sur les champs de la réponse (formulaires_reponses et formulaires_reponses_champs).

      Mais il serait effectivement intéressant d’avoir une balise qui permette d’afficher telle ou telle réponse précisément, ou de récupérer le tableau de valeurs de réponses d’un coup. Enfin je sais pas trop encore mais un truc plus rapide.

    • Je serais vraiment intéressé par cette balise.
      Avec mes petites connaissances, j’ai essayé ceci sans succès (pour afficher la valeur de selection_2) :

      <BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){id_formulaire}{id_auteur?}>
      <BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}>
         #VOIR_SAISIE{selection_2, #GET{valeurs}}  
      </BOUCLE_champs>
      </BOUCLE_formulaires_reponse>
    • si tu remplace #GET{valeurs} par #VALEURS cela devrait aller mieux ...

    Répondre à ce message

  • 8

    Bonjour
    sur cette page http://www.artas.org/?Contact-avec-l-ecole-Art-As j’ai deux boutons correspondant à deux choix possibles de destinataires, mais tous les deux peuvent se cocher en même temps, hors je voudrais qu’un seul des deux puisse être coché, qu’il n’y ait qu’un choix possible sur les deux.
    Si dans la partie édition du formulaire je mets : « Permettre à l’utilisateur de choisir un seul destinataire. » je perds les cases à cocher et me retrouve avec un menu défilant que je ne trouve pas approprié tel qu’il est, comment rester avec les deux cases et n’avoir qu’un choix possible ?
    Ou alors garder le menu défilant mais qu’à la place du premier destinataire apparent dans la fenêtre il y ait la possibilité de mettre une indication par exemple ?

    merci d’avance pour votre aide
    Cordialement

    • Bonjour
      Mes questions ne trouvent vraiment pas de réponses !?

    • tu es sûr que tu utilise formidable pour ce formulaire et pas « formulaire de contact avancé » ?

    • Bonjour Maïeul
      Oui, je n’ai rien d’autre que ce formulaire !

    • bah ce que ce n’est pas prévu. Il faut qu’on modifie le plugins saisies pour cela. Peut etre aurais-je du temps ce soir.

    • Ben un seul choix = liste déroulante, et plusieurs choix = case à cocher. C’est comme ça depuis le début dans cette saisie. mais jmpasso lui voudrait des boutons radios (= choix unique comme la liste déroulante mais avec tout visible).

      A minima il faudrait au moins rajouter la même option que pour la saisie « selection » : option_intro. Si cette chaîne est présente, alors on afficher l’option intro dans la liste déroulante. Un truc comme ça.

      Après on pourrait aussi imaginer une quatrième option « type_choix » pour la saisie « destinataires », qui serait : un_radio (par exemple). Et qui produirait des input radio à la place de la liste déroulante.

    • oui, je pensais bien mettre des boutons radios.

      je mettrai aussi option_intro.

    • pour jmpasso : le changement est effectif http://zone.spip.org/trac/spip-zone/changeset/76523. Attendre 22 h pour avoir le zip de saisies à jour, et 00h00 pour que cela soit proposer automatiquement dans la config de plugins. Tu aura alors un nouveau choix.

    • Super Maïeul !
      Merci beaucoup, c’est ce que j’attendais.

    Répondre à ce message

  • 3

    Bonjour,

    Est il possible d’indiquer le numéro id du formulaire et la date et l’heure à laquelle le formulaire à été posté dans le message de confirmation quand on envoie ?? Si oui, merci de me dire quoi faire.
    Merci d’avance pour votre aide

    • Comme expliqué ci-dessus, tu peux surcharger le squelette qui génère le corps du message de confirmation, et ajouter ces informations. Tu le copies colles dans ton dossier squelettes/, soit avec le même nom, soit en ajoutant l’identifiant d’un formulaire précis (cf la doc au-dessus) pour que ça ne s’applique qu’à ce formulaire-là. Et donc dedans tu vois que tu es dans la boucle d’une réponse précise à un moment donné, et dans cette boucle tu as accès à ces informations avec les champs #ID_FORMULAIRE et #DATE.

    • Bonjour,
      Merci pour la réponse, mais comme je suis nul, il me faut encore quelques réponses
      1/ quel est le fichier qui gère le message de confirmation ??
      Si c’est formulaire_email je ne vois aucune boucle de réponse laba
      J’ai crée un répertoire notification dans mon squelette et copie/colle le fichier formulaire_email mais marche toujours pas....MErci encore de votre aide

    • Je reviens, le problème est réglé, c’est bien le fichier formulaire_email, seulement c’est le mail de l’accusé de réception que je vérifié mes tests :) Merci encore

    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