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

  • 5

    J’ai un problème d’apostrophe dans le nom de l’envoyeur pour l’accusé de reception.

    Comme il n’est pas prévu d’indiquer le nom de l’envoyeur pour l’accusé de reception, spip utilise le nom du site. Le nom de mon site contient un apostrophe, ce qui donne lorsque je reçois l’accusé :
    L’assiette (pour le from) au lieu de L’assiette.

    Une idée ?

    • As-tu remarqué qu’il n’y avait pas de différence dans ton message ?

    • Bonjour,

      Je rencontre le même problème de remplacement de l’apostrophe par un codage que la gestion des commentaires de SPIP interprète trop bien mais pas mes lecteurs de mails

      Mairie d&#8217;Ailleurs

      au lieu de

      Mairie d'Ailleurs
    • Mmmh, sinon soit vos sites sont en ISO bizarre, soit les lecteurs mails ne savent pas gérer l’UTF-8 correctement ?

      La fonction que j’ai ajouté transforme les entités dans le charset du site. Qui est normalement UTF-8 par défaut. Après qu’un client mail ne soit pas capable de gérer un texte en UTF-8 en 2013, c’est un peu la lose.

    • Effectivement, ma base était en latin1_swedish_ci.
      Je viens de faire le test sur une base toute neuve et les apostrophes dans le nom de l’expéditeur passent bien.
      Merci beaucoup.

    Répondre à ce message

  • 2

    Bonjour

    Etrange : le formulaire inclu dans un article avec

    <formulaire|formidable|id=1>

    ne s’affiche pas (même dans la partie privée), alors que tout est ok en squelette avec

    #FORMULAIRE_FORMIDABLE{1}

    version spip 3.08

    Si vous avez une idée...

    • Et si tu essayes avec l’identifiant textuel que tu as assigné au formulaire, est-ce que là ça marche ?

    • Désolé par le délai, j’ai contourné la difficulté par un modele maison. J’ai pensé à repasser sur la dist, et le problème est réglé. Je pense qu’il y a une difficulté avec mes squelettes.

    Répondre à ce message

  • 3

    Bonjour, existe-t-il un moyen de générer un champ optionnel dans le cas ou l’on crée une liste de choix mais que cette liste ne comprend pas... le bon choix ?

    Par exemple, les formulaires google permettent de réaliser cette action :
    choix multiples : option1 / option2 / option3 etc et on peut selectionner autre, de sorte que celui qui remplit le formulaire mais qui ne trouve pas une réponse qui lui correspond puisse rajouter lui meme son choix après avoir coché « autre »...

    • Bonjour,

      J’ai le même pb avec des cases à cocher et une case « Autre » (autre|Autre). J’ai essayé pour le champ texte qui suit de conditionner l’affichage avec in_array("autre", @checkbox_X@), mais sans succès.

      (pas plus que @checkbox_X@=="autre", mais là, ça semble logique puisque @checkbox_X@ est un tableau, non ? )

    • je vais me pencher ce week-end sur quelques améliorations de formidable. J’essaierai d’intégrer celle là

    • Voilà, la nouvelle version de « saisies » ; qui sera dispo à 20h10 en zip et peu après minuit en vrai devrait apporter cela.

      Je suis preneur de toute remarques à ce sujet.

    Répondre à ce message

  • 3
    gauburtin

    Bonjour,

    J’ai installé le plugin et configuré un premier formulaire simple. A l’affichage d’une rubrique ou d’un article dans lequel le formulaire est inséré (

    <?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_FORMIDABLE'), '1'), array('', '', '', '', 'fr', '1')); if ($lang_select) lang_select(); ?>

    ), j’obtiens l’erreur suivante :
    1 Erreur(s) dans le squelette
    Numéro message squelette boucle Ligne
    1 Erreur SQL zbug_erreur_execution_page / /

    Le formulaire ne s’affiche pas.
    Ce n’est pas simple pour débuguer...

    Je suis en SPIP 3.05. Je pense avoir procédé à une installation correcte.

    Merci de votre aide si possible

    • gauburtin

      Je me réponds car cette erreur n’apparaît que si l’inclusion se fait dans le champ TEXTE.
      Dans le champ CHAPO, le formulaire apparaît et fonctionne correctement.
      Cela fonctionne aussi en inclusion de squelette tel que [#FORMULAIRE_FORMIDABLERSST_1381665849]

      Je soupçonne un problème d’exécution de script, que je n’arrive pas à distinguer.

      Any help ?

    • As-tu désactivé tous les plugins non nécessaires pour faire tes tests ?

    • gauburtin

      Apparemment, le problème était dû à une fonction php associée à un filtre SPIP.
      Ce test plantait :

      <?php $texte = trim('[(#TEXTE|texte_script)]'); 
      if $texte != '' ....
      ?>

      en incluant un filtre supplémentaire, l’erreur disparaît et le script s’exécute

      <?php $texte = trim('[(#TEXTE|textebrut|texte_script)]'); 
      if $texte != '' ....
      ?>

      Merci pour le coup de main. On trouve souvent la solution le lendemain matin...

    Répondre à ce message

  • 5
    severinelec

    Une solution pour un site qui est encore en iso-8859-1 ? Je sais que l’idéal serait que je passe le site en utf-8 mais je n’en suis pas propriétaire et pour l’instant je n’ai pas les accès FTP.
    Et donc j’ai de gros problèmes d’encodage.

    Si vous avez une idée de ce que je pourrais faire ? Ou il existe d’autres pluggins qui marcheraient mieux avec un site en iso-8859-1 ?

    • Il n’y aucune description d’erreur ou de bug dans ton message, donc difficile d’y répondre quoi que ce soit pour l’instant.

    • severinelec

      En clair dans mon formulaire j’écris la question suivante « votre enfant est-il en école maternelle ou élémentaire » et j’obtiens « Votre enfant est-il en école maternelle ou élémentaire ? »

      Je pense que c’est parce que le plugin est fait pour des sites en UTF-8 alors que le mien est en iso-8859-1. Et donc je demandais si vous saviez comment je pourrais m’en sortir sans changer l’encodage de mon site.

    • Le plugin n’est fait pour rien du tout, enfin il n’y a pas de programmation spécifique à tel ou tel encodage (en tout cas pas d’après mes souvenirs, et il n’y a pas de raison). Donc je ne vois pas d’où ça peut venir pour l’instant.

    • severinelec

      Pour info j’ai converti mon site en UTF-8 et maintenant ça marche nickel.

    • Si tout est bien converti, ça ne pourra que lui faire du bien, de toute façon ! :)

    Répondre à ce message

  • 2

    Bonjour. Super plugin. Je suis en train de modifier pour que dans la partie privé quand je sélectionne une réponse de formulaire, ça affiche le formulaire avec les champs remplis au lieu de la liste des saisies de façon à ce que les administrateurs puissent modifier des réponses de n’importe quel formulaire. En effet je l’utilise pour que les visiteurs inscrits s’incrivent à des dates qui sont alors affichées dans un calendrier.
    Pour l’affichage du formulaire avec les réponses c’est bon. J’ai cependant 2 questions : chaque visiteur ne peut remplir qu’un formulaire. Mais du coup si je choisis ce parametre dans la création du formulaire, il ne peut plus s’afficher avec les réponses dans la partie privée (puisqu’une fois qu’il est remplit ça dit « Vous avez déjà répondu au formulaire ». J’aimerai alors pouuvoir autoriser des modifications des champs des formulaires seulement dans la partie privée. Je pensais passer dan,s mon squelette une variable qui autorise les modifs, mais je ne sais pas quelle est cette variable... $options ? et comment lui dire que c’est modifiable ?

    2e question qui sera un plus pour une évolution de mes saisies de réponses ce serait d’avoir une piste pour que le formulaire soit complétable mais non modifiable. C’est à dire dans mon cas il contient 5 champs de dates. Je souhaiterais que si un visiteur a par exemple compléter 2 dates, qu’il puissent revenir sur son formulaire pour ajouter d’autres dates mais sans pouvoir modifier les premières .

    La question 2 est moins importante pour l’instant.

    Merci d’avance pour vos réponses.

    • Pour le premier point, ce n’est pas trivial, il faut (c’est dans la — très longue — liste des choses à faire d’ailleurs) faire des modifications pour permettre aux admins (ou auteurs quand on a activer la liaison avec des auteurs) de modifier n’importe quelle réponse de leurs formulaires. Mais donc avec une vraie interface pour ça dans l’espace privée lorsqu’on visionne les réponses.

      Pour le deuxième point, clairement je vois pas comment ça pourrait faire partie d’une option générique dans la construction des formulaires. À mon avis ça serait presque plus rapide de développer un formulaire CVT dédié, propre à ton besoin.

    • Je n’avais pas vu ta réponse. Entre temps j’ai bidouillé un peu et j’ai modifié le squelette qui ldonne la liste des réponses à un formulaire. Au lieu de faire un affichage via #VOIR_SAISIE j’ai rappelé le formulaire complété par le visiteur inscrit. J’ai aussi modifier pour que les admins puissent voir tous les formulaires répondus et donc les modifier. A chaque modif il réenregistre bien en utilisant l’identifiant du visiteur inscrit à l’origine de la première réponse.

      Pour le deuxième point je pensais à une option du genre 1) modifiable, 2 non modifiable, 3 complétable. Il faudrait donc je pense, lors de l’enregistrement tester si tous les champs sont remplis. Dans ce cas enregistrement et non modifiable ensuite. Mais dans le cas ou des champs resteraient vides proposer seulement de remplir ceux-la. Bon c’est peut être pas très clair tout ça.

      Mais j’avance.

    Répondre à ce message

  • 2

    Messages de retour pour « Formidable »

    Bonjour, j’utilise Formidable avec le plugin Transaction. De ce fait, je ne peux pas configurer de message de retour du formulaire : si on utilise Transaction, cela est impossible.

    Je gère en même temps une inscription à un colloque et les frais d’inscription. Or pour les étudiants, l’inscription est gratuite. De ce fait, « transaction » ne s’enclenche pas, l’inscription est néanmoins validée, et Formidable m’affiche le mot « Rien » (cf photo)

    Je voudrais modifier ce mot « rien » par une phrase du genre « votre inscription a bien été prise en compte ». Où trouver ce mot ? J’ai regardé dans les fichiers de langue de Formidable, et je n’ai rien trouvé.

    Merci, bonne journée,

    Eric LM

    Répondre à ce message

  • 10
    JérômeD

    Je me permets de republier mon problème :

    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

    • Ça veut dire quoi l’URL où il y a l’image ?

      Sinon une page blanche c’est 99% du temps une erreur PHP que tu ne vois pas car ton PHP est configuré pour les masquer en prod. Il faut activer l’affichage des erreurs pour avoir plus d’informations.

    • JérômeD

      Bonjour et merci pour la réponse.

      En effet, je voulais dire l’URL où il y a le formulaire...désolé pour cette erreur.

      En ce qui concerne la configuration du serveur, je n’ai pas la main dessus. C’est un serveur académique. Y-a-t’il une autre solution pour savoir ce qu’il se passe ?

      Merci d’avance

    • http://www.spip.net/fr_article4453.html?var_recherche=debuggage#infos_plus

      // Activer les rapports d’erreurs PHP
      error_reporting(E_ALL^E_NOTICE);
      ini_set ("display_errors", "On");
      
       // Afficher toutes les erreurs dans SPIP
      define('SPIP_ERREUR_REPORT',E_ALL);

      dans ton config/mes_options.php

    • JérômeD

      Merci pour cette solution, j’obtiens en rapport d’erreur :

      Notice : Undefined index : cs_spip_options in /home/www/html/citic/ecoles/saint-cergues/tmp/couteau-suisse/mes_spip_options.php on line 3

      Notice : Constant _DIR_PLUGIN_ARTICLE_PDF already defined in /home/www/html/citic/ecoles/saint-cergues/plugins/auto/article_pdf/v0.4.5/article_pdf_mes_fonctions.php on line 3

      Notice : Undefined variable : destinataires in /home/www/html/citic/ecoles/saint-cergues/plugins/auto/formidable_1_0/traiter/email.php on line 30

      Est ce que cela vous dit quelque chose...je suppose que c’est la dernière notification qui est importante.

      Merci d’avance
      Jérôme

    • Aucune de ces trois erreurs n’est une erreur fatale (fatal error) entraînant une page blanche. Ça ce sont les erreurs affichées à la place de l’ancienne page blanche (cad une page blanche avec ces trois erreurs dessus) ?

    • JérômeD

      Merci pour l’explication mais là j’avoue que je suis un peu perdu.
      Si aucune de ces erreurs est la cause de la page blanche. Qu’est ce qui la provoque à la validation du formulaire ?

      Merci d’avance

    • Ben je ne reproduis pas donc difficile de savoir… Ce sont bien les seules erreurs que tu vois à la place de la page blanche lorsque tu actives l’affichage des erreurs ?

      Version de PHP ?

      Et aussi évidemment : pour tester il faut toujours désactiver tous les plugins non obligatoires pour tester celui qu’on veut tester. Ce point est marqué dans « Les choses à faire avant de poser une question ».

    • JérômeD

      Bonsoir,

      En désactivant le plugin couteau suisse, j’ai ce message :
      Fatal error : Call to undefined function cs_nettoie() in /home/www/html/citic/ecoles/saint-cergues/tmp/cache/skel/html_c9dd0c7468087ab661f85098b060cf89.php on line 198

      avec donc une erreur fatal. Est-ce que cela viendrait de là ? Par contre mon site n’est plus lisible du tout dans ce cas là ?

    • Non, c’est parce qu’il faut vider le cache (ou vider le dossier tmp/) quand on désactive (et parfois active) des plugins.

    • JérômeD

      Merci pour le suivi de ce problème.

      En effet, en vidant le dossier tmp/ plus de soucis sur le formulaire...c’est donc formidable.

      Merci pour tout ce travail et longue vie à SPIP et formidable...

      Je sais que c’est déjà demandé mais le développement d’un upload de fichier est-il prévu ?

      Jérôme

    Répondre à ce message

  • 6

    Bonjour,

    J’utilise FORMIDABLE pour créer un simple formulaire de contact avec 3 champs obligatoires : parfait, tout fonctionne.

    Néanmoins, je constate une petite erreur de formatage html lors du renvoi des messages d’erreur sur ma page de contact : voici le code retourné lorsque l’on ne rempli aucun champ obligatoire et que l’on valide le formulaire :
    <p class="reponse_formulaire reponse_formulaire_erreur"></p><p>Il y a des erreurs dans les champs ci-dessous, veuillez vérifier votre envoi.</p><p></p>

    On peut constater que le balisage du message d’erreur n’est pas encadré par la classe class="reponse_formulaire reponse_formulaire_erreur". Ceci ne nous permet pas d’appliquer un style particulier pour reponse_formulaire_erreur ou reponse_formulaire_ok.

    Désolé mais je n’ai pas trouvé à quel endroit corriger ceci dans le code de FORMIDABLE, à moins que ce code ne soit généré par un autre outil :-/

    Merci pour votre aide,
    françois

    Répondre à ce message

  • 1
    Foli Fafa

    Bonsoir à tous,
    Ce plugin est l’un des meilleurs que j’ai eu a utiliser, il est trop cool. Le seul hic est qu’il ne propose pas le INPUT de Type File pour charger des fichiers. Quelqu’un a t’il une astuce pour réaliser cela. Merci pour votre aide.

    • Bonjour,

      J’attends aussi avec impatience de pouvoir passer à FORMIDABLE, mais la fonctionnalité d’upload de fichier est bloquante. Y-a-t-il un autre plugin à installer en plus de Formidable pour cela ?

      merci

      dd

    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