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

812 discussions

  • 3

    bonsoir
    j’ai installé Formidable depuis peu sur un site d’école en vue de créer un formulaire permettant à des élèves de créer des fiches de lecture.
    Le formulaire s’affiche, la saisie des données et ok, MAIS :
    -  après validation, le message prévu s’affiche avec le titre des champs accompagnés de « sans réponse »
    -  comment faire apparaître instantanément sur le site public les contenus de ces formulaires ?

    pour l’instant je fais des copier-coller des résultats en espace privé dans un article dédié. C’est propre mais fastidieux.
    voir ici : http://ecole.cadou.free.fr/spip.php?article321

    merci !

    • - après validation, le message prévu s’affiche avec le titre des champs accompagnés de « sans réponse »

      Pas normal, tu as sélectionné quoi dans la config du formulaire pour ce qui doit être affiché après validation ?

      - comment faire apparaître instantanément sur le site public les contenus de ces formulaires ?

      Il y a un modèle pour afficher les réponses. Dans un squelette tu peux donc faire une boucle sur les réponses à ce formulaire et utiliser ce modèle en lui donnant l’identifiant de chaque réponse.

    • bon, j’ai viré l’affichage après saisie du formulaire puisque j’obtiens des « sans réponse » ou un truc du genre.
      Par contre, dans l’espace privé, mes résultats de formulaire apparaissent comme « publié en ligne ».
      Je veux bien, mais où ?
      Où se trouve le modèle pour l’affichage dont tu parles ?
      une petite ligne de code serait la bienvenue pour démarrer les fameuses boucles sur les réponses car là, vraiment, je ne sais plus faire.

      merci, merci, merci d’avance !

    • http://zone.spip.org/trac/spip-zone/browser/_plugins_/formidable/trunk/modeles/formulaires_reponse.html

      <BOUCLE_formulaire(FORMULAIRES){identifiant=truc}>
          <BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
               #INCLURE{modeles/formulaires_reponse, id_formulaires_reponse}
          </BOUCLE_reponses>
      </BOUCLE_formulaire>

    Répondre à ce message

  • 5

    Bien le bonjour,
    Ce petit mot pour connaître la raison du non chargement du css dans la version 1.3.3.
    A noter que j’ai intégré le formulaire dans le contenu sous la forme

    <?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(); ?>

    , qu’il apparait bien, qu’il fonctionne... mais non formaté.
    Mon associé à installé la version 1.1.1 sur un site, les css sont ok. Tous les deux sous SPIP3.
    Pensez-vous intégrer une prévisualisation ?
    Bravo en tout cas pour le boulot !

    • De quelles CSS tu parles ? Le plugin n’intègre absolument pas de CSS, c’est ton site, ton thème qui gère le graphisme de ton site. Ce plugin ajoute une fonctionnalité, ça te génère tel ou tel HTML, mais c’est à toi de le styler comme tu veux ensuite.

      Enfin... « LE » styler... styler tes formulaires en général quoi. Le plugin génère des formulaires avec exactement la même convention html/css que ceux fournis par SPIP. Donc c’est pas spécialement styler ce que génère ce plugin.

    • Il suffit donc de gérer .formulaire_spip {} ?

    • Si tu veux que tous tes formulaires aient une cohérence oui, il suffit de gérer la structure commune.

      Après si tu veux explicitement les styler différemment, ya la classe commune « formulaire_formidable » dessus. Et si encore plus précisément tu veux styler UN formulaire précis différemment, ya la classe « formulaire_*identifiant* » aussi.

    • Formidable !!

      Juste une chose : et pour la prévisualisation (comme dans spip-contrib !)

      Merci beaucoup, super boulot.

    • Ya pas de prévisualisation, c’est pas un formulaire de forum. Ça pourrait être une fonctionnalité supplémentaire... à ajouter dans la todolist... :)

    Répondre à ce message

  • 2

    bonjour,

    est il possible de mettre un champ pour attaché un fichier au formulaire ?
    j’ai regardé mais pas trouvé

    merci de votre réponse

    • Non, pas pour l’instant. Ça fait partie des choses prévues depuis le début, mais j’aime pas faire à l’arrache et c’est pas facile de le faire proprement (cad en gardant en mémoire le fichier téléchargé s’il y a eu des erreurs dans d’autres champs).

    • merci pour ta réponse rapide.
      je vais donc être obligé de passer sur un autre plugin
      Quand l’amélioration sera faite puis je être prévenu car j’aime moins le plugin que je vais utiliser.
      Bonne journée

    Répondre à ce message

  • 2

    Bonsoir

    Je viens de creer mon formulaire travail avec l’identifiant work pour un sondage. J’ai utilisé le code <formulaire><formulaire|travail|id=3></formulaire> et le code <formulaire|travail|id=3></formulaire> pour l’insérer dans le texte d’un article que j’ai créé.Mais rien n’apparaît dans l’espace public.
    Que dois-je faire pour l’insérer dans un article ?

    • Bonjour

      Voici mon code

      <formulaire|travail|id=3></formulaire> 

      Merci de m’aider

    • Ce n’est pas du tout ça. La documentation est juste au-dessus dans le paragraphe « Appeler mon formulaire ». :)

    Répondre à ce message

  • 1

    Bonsoir

    Je viens d’installer le plugin du formulaire pour un sondage.Après la configuration de mon formulaire travail avec identifiant work.
    J’ai placé le code

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

    dans le squelette article de mon site.
    Mais rien ne s’affiche. Que dois-je faire ?
    Aidez moi

    Cordialement

    Répondre à ce message

  • 4

    Bonjour à toutes et tous,

    je travaille sur un formulaire qui a pour objectif de permettre la publication d’annonces. Dans ce formulaire, j’ai un champ « date de fin de publication ». Sur ma page qui liste les annonces, je voudrais pouvoir les trier par date de fin de publication, et sur cette même page faire apparaître en grisée les annonces dont la date est dépassée.
    Je me demande si c’est possible dans la mesure où les champs du formulaire ne représentent pas un champ dans la base de données. Du coup je ne voit pas très bien comment formuler une requête qui me permettrai de trier...

    merci pour vos reponses

    • Ce plugin n’a jamais eu pour but de créer de nouveaux « faux objets » pour les utiliser comme une table classique. Il sert avant tout à faire des questionnaires, sondages ou formulaires de contact.

      L’enregistrement par défaut est adapté pour faire des stats de sondage par exemple, mais pas du tout pour requêter directement dessus afin de sortir facilement du contenu ou de faire des tris particuliers.

      Cependant je crois que quelqu’un avait rajouté des critères d’aide tirés de F&T :
      {tri_selon_reponse input_3} par exemple, tu peux essayer.

    • merci pour la rapidité de la réponse. Je ne trouve rien relatif au critère d’aide auquel tu fais allusion. Est-ce que tu aurais un lien à me donner ?
      merci

    • Ben... mon message. Tu as testé ? Avec le bon nom de champ par rapport à celui que tu veux bien sûr. Le code est là :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/formidable/trunk/public/formidable_criteres.php

      (tri_selon_donnee c’est pour compat, c’est tri_selon_reponse maintenant)

    • ah super ça marche. C’est juste que pendant tout un moment j’essayai de trier sur la date mais que dans la conf de mon formulaire j’avais demandé à ce que la date soit au format datetime de sql, ce qui empechait le tri. J’ai viré ce traitement et maintenant ça marche nikel, merci beaucoup !!!

    Répondre à ce message

  • 3

    Je suis en fin de production d’un site, et je n’arrive décidément pas à trouver comment avoir la main sur le date-picker...

    Comment peut-on paramétrer l’affichage du calendrier ?
    En vous remerciant

    Répondre à ce message

  • 2

    Bonjour à tous.

    J’ai installé ce plugin hier sur mon spip qui est en version 3.
    J’ai généré un petit formulaire de base pour tester, y a aucun problème pour le moment, je reçois meme un email.
    La ou je bloque, mais alors complètement, c’est à cette étape :

    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 classique :

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

    ou bien

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

    Dans un squelette
    #FORMULAIRE_FORMIDABLE34 ou bien #FORMULAIRE_FORMIDABLEcontact

    Comment faire pour faire apparaitre le lien du formulaire sur mon site public dans une rubrique que j’aurais appeler « FORMULAIRES » (car il y en aura plusieurs dans cette rubrique).
    Je sèche totalement. google ne m’a pas aidé sur ce coup là, et bien évidement, je précise que j’y connais absolument rien en développement web. Parler moi d’architecture réseaux, d’administration client/serveur, etc, pas de probleme, mais dev web j’ai du mal :-(

    Please help me, j’imagine que c’est d’une évidence pour vous

    • Je me réponds à moi meme.
      Je suis tombé sur ce plugin plugin Forms et ce passage m’a interpellé :

      Vous insérez donc ce formulaire dans un article, à la manière d’une insertion d’image : lorsque vous créez ou modifiez un article, vos formulaires se trouvent à gauche de votre article et vous n’avez qu’à coller le code du formulaire voulu dans le corps de votre article (comme pour une image « »)
      Ex : Dans ce site, « <form1> » inséré dans un article donnera le formulaire comme ceci : « <form1> »

      J’ai donc compris qu’il fallait tout bêtement créer un article et dans le corp du texte ajouter la balise :

      « <formulair|formidable|id=xx> » ou bien
      « <formulair|formidable|id=nom> »

      Par contre afficher le formulaire dans un squelette, et le mettre en forme, je ne trouve toujours pas :-(

    • Il y a une différence entre insérer le formulaire quelque part sur le site, auquel cas tu as la doc au-dessus avec les deux méthodes (soit dans un contenu soit en squelette), et faire un lien vers le bon endroit dans tes menus.

      Pour ce point, pas de rapport avec ce plugin, c’est comme n’importe quoi d’autre, il faut connaître le langage de squelette de SPIP (la doc est sur spip.net) ou bien en utilisant le plugin Menus si tu veux le faire à la souris dans l’interface.

      Si tu as insérer ton formulaire dans un article, ben tu fais un lien vers cet article. Et si tu as mis ton formulaire dans une page quelconque (page=truc) et bien tu fais un lien sur cette page.

    Répondre à ce message

  • Sylvain_LD

    Je suis en SPIP 3.0.5 avec easyPHP en local.
    J’ai le message suivant dans l’espace privé :
    Strict Standards : Only variables should be passed by reference in C :\Program Files (x86)\EasyPHP-12.1-AVCP\www\plugins\formidable_1_0\formulaires\formidable.php on line 101
    quand je crée et quand j’utilise le plugin

    Répondre à ce message

  • 3
    mrskater

    Bonjour,
    à quel endroit peut-on configurer l’email de réponse de l’accusé de réception. En effet j’ai des utilisateurs qui répondent à l’accusé de réception, mais la personne qui traite les emails du formulaire du site n’est celle du webdesigner.

    Je vous remercie par avance.

    • Je rejoins cette question car moi aussi je suis gênée par le choix de ne pas faire figurer l’email de l’envoyeur dans la construction des messages.
      Cela génère des erreurs dans les réponses qui se font ensuite via les logiciels de messagerie des uns et des autres et la plupart du temps, c’est moi (en tant que webmaster) qui reçoit ces échanges.

      Typiquement, l’email reçu par mon client est construit ainsi :
      Demande de devis depuis le site Truc-Muche
      nom du visiteur <adresse du webmaster>

      Et cette ligne est reprise dans la réponse qui lui est envoyée par mon client.
      De : nom du visiteur [mailto:adresse du webmaster]
      Envoyé : vendredi 14 septembre 2012 13:27
      À : destinataires
      Objet : Demande de devis depuis le site Truc-Muche

      Dans email.php, j’ai relevé ces lignes

      // on mets le couriel de l'envoyeur dans Reply-To et on laisse
      // le from par defaut de Facteur car sinon ca bloque sur les SMTP un peu restrictifs

      puis plus loin

      // Ne pas mettre from=$courriel_envoyeur car ça declenche facilement les antispams
      // garder le from par defaut de facteur (ou celui du site)
      $ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, "", "X-Originating-IP: ".$GLOBALS['ip']);

      Que faire pour que ce soit bien l’email de l’envoyeur qui figure sur la ligne From ?
      Merci d’avance

    • C’est un hack effectivement, mais ce n’est pas non plus normal que les clients de courriels dont tu parles aient ce comportement. Si tu fais « Répondre » dans n’importe quel client mail, c’est censé toujours prendre le contenu de « Reply-To » en priorité au contenu de « From » pour remplir les destinataires de la réponse.

      Dans la dernière version de Formidable, il y a cependant une option dans la config du traitement email pour forcer l’utilisation du bon mail dans le From.

    • Merci pour ta réponse RastaPopoulos. Ce site est en SPIP 2.1.16. J’imagine que la version de Formidable dont tu parles est pour Spip 3.
      Je pourrai modifier cela lors de la prochaine opération de mise à jour sur ce site.
      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