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

    Super plugin, j’ai juste une question, comment faire pour éditer une réponse ? c’est possible ?

    • Pour les admins il n’y a pas ça pour l’instant effectivement (à moins d’utiliser les crayons quelque part dessus). Pour les utilisateurs, une même personne peut éditer sa réponse si on l’a configuré dans le traitement d’enregistrement en base. Le formulaire s’affiche avec les trucs déjà remplis et on le modifie, suivant la configuration ça enregistre dans la même réponse.

      C’est pour quel usage ? Pour de la modération il faudrait surtout permettre la modif dans l’espace d’admin. Pour les utilisateurs, ça n’a d’intérêt que pour les formulaires configurés comme pouvant n’avoir qu’une réponse unique par visiteur.

    • En fait, c’est pour faire un module de fiche de suivi. Les utilisateur remplissent leurs fiches (le même formulaire remplis plusieurs fois), mais ils doivent pouvoir éditer les réponses.
      Comment faire pour afficher un formulaire pré remplis ? Ca me suffirais de faire ca dans la partie publique...

      En tout cas, merci pour la réponse

    • Mais contrairement à l’ancien plugin Forms&Tables, ce plugin n’a depuis le début que la prétention de faire la partie « formulaires », pas de simuler des tables éditoriales virtuelles. C’est fait pour faire des formulaires de contact, de sondage, de questionnaire, mais pas pour se transformer en contenu éditorial. Après on peut bien sûr bidouiller pour essayer de l’utiliser comme ça évidemment, hein. Mais c’est à ses risques et périls. :D

    • Je comprend bien. Ce que j’ai du mal à saisir, c’est qu’il y a une option pour que les réponses soit éditables (et multiples) mais je ne vois pas comment on peut les éditer...

      En gros j’ai créé le formulaire, je le met dans un article (ou dans un squelette), il enregistre bien les réponses, mais après c’est très flou.

    • C’est le troisième paramètre du formulaire :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/formidable/trunk/formulaires/formidable.php

      Faut donner l’identifiant de la réponse à modifier.

    Répondre à ce message

  • 1

    Super plugin.

    Je voulais savoir comment on fait pour éditer une réponse avec ce plugin. Il faut ouvrir le formulaire en version pré-rempli et l’enregistrer à nouveau ? Bref on fait comment ;)

    merci d’avance

    • quel con j’ai posté deux fois. Désolé, je ne retrouvais plus mon premier post et j’ai fini par croire que je m’étais loupé... puffff

      désolé

    Répondre à ce message

  • 2

    Bonjour,
    Super plugin ! Bravo ! et merci !
    Un seul problème pour l’instant (Destinataire unique : Moi - « Mettre tous ces auteurs en destinataires. L’utilisateur n’aura aucun choix. » coché) : Formidable ne transfert pas les messages dans ma BAL, alors qu’il envoie bien à l’adresse de l’envoyeur le message de confirmation.
    Suis en SPIP 2.1.12, plugins Saisies, Yaml, Bonux, Facteurs, Vérifier, à jour, tmp intégralement vidé... (?)

    J’suis coincé...

    • Ben si ça part pour l’accusé de réception, c’est que l’envoi des mails fonctionne. Ça va dans tes spams ? Ou alors la génération du mail HTML pour le mail de base plante, mais dans ce cas je vois pas pourquoi l’accusé, qui est généré juste après, fonctionnerait, vu que normalement ça devrait arrêter le script si ça plante.

      Bref, soit dans les spams, soit faut fouiller les fichiers de logs de PSIP pour voir s’il y a des messages bizarres.

    • Merci pour ta réponse et ta rapidité.
      Mais rien dans les spams, rien dans la corbeille.
      Quant à fouiller les logs... j’ai essayé mais « au feeling » car je n’ai pas le niveau pour y détecter consciemment des bizarreries et qu’est-ce qu’une bizarrerie ?
      Si c’est la seule piste à emprunter, je ne peux qu’abandonner, à regret.
      Un grand merci quand même !

    Répondre à ce message

  • 1

    Je viens de tester formidable sous SPIP 3.

    Je constate deux problèmes :
    -  l’un, mineur mais facilement solvable : le message de retour d’un formulaire ne passe pas par propre(). Du coup on ne peut y utiliser des raccourcis typo de SPIP (typiquement : mettre un lien). Je peux l’implémenter, mais est-ce qu’il y a une raison à ne pas le faire ?
    -  l’autre, plus gênante : les css de jquery ui ne sont pas chargés. Du coup le datepicker était assez moche. Pour mon besoin j’ai chargé via mon plugins, mais je m’interroge : faut-il les charger systèmatiquement ?

    Répondre à ce message

  • 3

    Bonjour,
    Je viens d’installer et de configurer un chouette formulaire sur SPIP 3.0.10 [20422] avec Facteur 2.4.5. Au premier test d’envoi, voici les vilaines choses qui me sont adressées :

    Strict Standards : Non-static method Facteur::html2text() should not be called statically in /homepages/8/d300422504/htdocs/plugins/auto/formidable_1_0/traiter/email.php on line 109

    Strict Standards : Non-static method Facteur::html2text() should not be called statically in /homepages/8/d300422504/htdocs/plugins/auto/formidable_1_0/traiter/email.php on line 171

    Le mail est bien généré et reçu correctement. Quel est le problème doc ?
    Merci.

    • La version trop vieille de PHP

    • Ben non : PHP Version 5.4.17 et mysql 5.1.66.
      Et puis maintenant, j’ai :

      Warning : Illegal string offset ’id_auteur’ in /homepages/8/d300422504/htdocs/ecrire/inc/session.php on line 210

      Warning : Illegal string offset ’hash_env’ in /homepages/8/d300422504/htdocs/ecrire/inc/session.php on line 219

      Warning : Illegal string offset ’ip_change’ in /homepages/8/d300422504/htdocs/ecrire/inc/session.php on line 220

      Et je peux plus accéder à l’admin du site. Super :-)

    • Ce ne sont pas des erreurs bloquantes mais des erreurs de syntaxe de PHP. Dans ces dernières versions, le niveau par défaut d’affichage des erreurs est beaucoup plus sévère et affiche beaucoup plus de choses. En tout cas ce n’est pas ça qui bloque la page. Caché vidé ?

    Répondre à ce message

  • 4

    Bonjour,

    J’ai besoin d’aide sur les champs cachés avec valeur dynamique. J’ai 3 variables dont 2 ne dépassent pas les 4 caractères, c’est la 3e qui me pose problème. Lorsque je l’ajoute le message de confirmation ne s’affiche pas, la variable id_formulaire n’apparait pas dans l’adresse.

    Il semble que ce problème vienne du fait que ce 3e champ fait 14 caractères. Lorsque je le réduis à 4, aucun soucis, malheureusement j’ai besoin de 14 :)

    Une idée ?

    Aymeric.

    • Sans voir ni code ni URL ni rien, je n’ai pas d’idée non. En fait je n’ai même pas compris de quoi tu parlais. :)

      Tu peux écrire du code ici, en l’entourant de <cadre class="quel_langage"></cadre>.

    • Et bien je veux parler des champs que l’on peut charger dans des champs cachés grâce à ce type de code comme le mentionne la doc :

      [(#FORMULAIRE_FORMIDABLE{monform1, [(#ARRAY{hidden_1, [(#ENV{maVar1})], hidden_2, [(#ENV{maVar2})], hidden_3, #GET{maVar3})]})]

      J’ai fais des tests et il semble que les valeurs provenant de #ENV ne soient pas limitées en taille tandis que celles provenant du #GET sont limitées à 10 caractères.

      Dans mon exemple ci-dessus dès que #GETmaVar3 fait + de 10 caractères et bien le formulaire ne renvoi pas de message de retour.

      J’espère que c’est plus clair.

      Aymeric.

    • Il n’y a absolument aucune limite, ce sont toutes des balises standards de SPIP. On peut y mettre n’importe quoi y compris des tableaux énormes. Ce qu’on veut.

      Je ne sais pas si c’est un copier coller tel quel ou s’il y a une coquille, mais en tout cas le code indiqué n’est pas bon, il manque une accolade je crois pour fermer le #ARRAY. D’ailleurs on est pas obligé de mettre des [()] s’il n’y a aucun filtre nulle part.

      Avant de valider, faudrait déjà voir ce qu’il y a comme « value » de chaque hidden en question dans ton HTML généré. Une URL ?

    • Non effectivement ce sont mes tests qui n’ont pas été bien réalisés j’ai l’impression. Je continue de chercher car j’ai l’impression que c’est le simple fait d’appeler #DATE dans mon squelette qui empêche l’affichage du message de retour... Si j’insère une date manuelle aucun soucis...

    Répondre à ce message

  • 7

    Bonjour,
    suite à la migration du site concerné de spip 2.1 vers 3.0.10, je constate un bug lors de l’affichage des formulaires, aussi bien en partie privée qu’en partie publique : je ne peux dans aucun cas visualiser les formulaires. Le code de la page semble s’interrompre au niveau du formulaire (la suite de l’article et le pied de page ne s’affiche plus).
    Le soucis se présente également lorsque je crée de nouveaux formulaires.
    Par contre, dans la partie privée, je peux consulter/éditer/modifier les formulaires, sans problème apparent.
    Avez-vous une idée de l’origine de ce soucis d’affichage ?

    La config en place :
    spip 3.0.10 [20600]
    Formidable 1.3.6-dev
    plugins Yaml, saisies, vérifier et facteur à jour.
    PHP 5.1.6

    D’avance merci pour votre aide.

    • Si la page s’arrête de se charger c’est qu’il y a une erreur PHP. Il faut activer l’affichage des erreurs PHP afin de savoir ce qui est dit.

      Par exemple dans mes_options.php :

      <?php
      error_reporting(E_ALL^E_NOTICE);
      ini_set ("display_errors", "On");
      ?>
    • Merci pour votre aide, j’ai pu localiser l’erreur, toutefois sans réussir à la résoudre :(

      Elle se situe dans le fichier plugins/formidable_1_0/formulaires/formidable.php
      au niveau de la ligne 54 :

                  // On déclare les champs
                  $contexte += array_fill_keys(saisies_lister_champs($saisies), '');
                  $contexte['mechantrobot'] = '';

      Je n’y repère pas d’erreur (je ne maitrise pas complètement php).
      Y voyez-vous quelque chose ?

    • Trop vieille version de PHP. La 5.1 est une version ultra buguée qui a duré très peu de temps et qui a vite été remplacée avec corrections de bugs ET ajouts de fonctionnalités (dont nouvelles fonctions pour les tableaux). Il faut au moins la 5.2 je crois.

    • Merci pour la précision.

      En attendant de pouvoir mettre à jour nos serveurs, pensez-vous qu’il est possible de contourner le problème en ajoutant la définition de la fonction array_fill_key dans le fichier formidable_fonctions.php ?

      function array_fill_keys($keyArray, $valueArray) {
          if(is_array($keyArray)) {
          foreach($keyArray as $key => $value) {
          $filledArray[$value] = $valueArray[$key];
          }
       }
       return $filledArray;
       }
    • Je viens de faire le test... et ce n’est pas concluant ...

    • Plutôt dans un truc_options.php peut-être. Et mieux vaut entourer d’un test « if (!function_extists(... » comme ça quand tu mets à jour et que la fonction est là, ça ne plante pas.

    • Effectivement ça marche ainsi !
      La solution mise en place, si cela peut en aider d’autres :
      remplacer la fonction array_fill_keys en fin du fichier _options.php par celle citée précédemment.

      Encore merci pour vos réponses claires et votre réactivité !

    Répondre à ce message

  • 2

    Bonjour,

    Petit problème avec la fonction exporter les réponses... Ça ressemble à un problème de droits sur le serveur.

    Dans quel répertoire de SPIP (v2.1.20) le fichier .csv est-il créé avant d’être téléchargé ?

    Merci d’avance pour la réponse

    • OK merci, donc je vais chercher autre part les causes de ce problème.

      Je récupère un fichier csv vide... J’ai pourtant plus de 150 réponses.

      Je vais tenter l’export direct depuis phpmyadmin.

    Répondre à ce message

  • 2

    J’ai une dernière question liée à la mise en conformité de Formidable vis à vis de l’accessibilité (référentiel Accessiweb) :

    Lorsque que l’on utilise un groupe de champs (fieldset), le titre du groupe de champs est placé entre <h3 class="legend"><span>...</span></h3>.

    Or Accessiweb préconise que chaque regroupement de champs ait une légende indiquée dans le code avec une balise <legend>... </legend>.

    J’aimerais que Formidable me génère une balise <legend> plutôt qu’une balise <h3 class="legend"> mais je n’ai pas trouvé à partir de quel fichier la balise <h3 class="legend"><span>...</span></h3> est générée.

    Sauriez-vous quel serait le fichier à surcharger proprement pour obtenir ce résultat ?

    • Dans le plugin Saisies, dans la saisie fieldset.html.

    • Merci beaucoup pour votre réponse rapide et efficace.

      Grâce à votre aide, j’ai fait une copie du fichier fieldset.html, présent dans le plugin saisies (dans /saisies/saisies/). J’ai ensuite surchargé ce fichier (remplacement de la balise <h3 class="legend"><span>...</span></h3> par la balise <legend>...</legend>) puis j’ai installé ce fichier fieldset.html modifié dans mon dossier /squelettes/saisies/ et ça fonctionne.

      Merci encore.

    Répondre à ce message

  • 2

    Bonjour,

    Je suis sur SPIP 2.1.13 [19292].
    Je suis actuellement en train de tester le plugin Formidable (v. 0.6.6.) que je trouve très bien.

    Pour respecter les critères d’accessibilité Accessiweb, j’aimerais personnaliser le squelette formidable.html (présent dans le dossier /formulaires du plugin) afin de rajouter un attribut title au niveau du bouton de soumission du formulaire pour que l’intitulé de ce bouton soit pertinent.

    Je souhaiterais que cet attribut puisse être rajouté par un contributeur en appelant le formulaire formidable avec un nouveau paramètre |btok=complement (ex : <formulaire|formidable|id=5|btok=envoyer mes réponses>).

    Pour cela, j’ai créé une copie du squelette formidable.html que j’ai placé dans le dossier /squelettes/formulaires/ et j’ai modifié le morceau de code HTML suivant :

    <input type='submit' class='submit' value='<:bouton_valider:>'[ title='<:bouton_valider:>, (#ENV{btok}|attribut_html)'] />

    Lorsque je teste ce changement dans un article, le rajout de l’attribut title n’est pas pris en compte car #ENV{btok} reste vide.

    Que dois-je faire ? Pourquoi l’ajout du nouveau paramètre |btok dans la balise <formulaire|formidable...> n’est pas pris en compte ?

    • Parce que n’est pas un modèle appelant un squelette, c’est un modèle dynamique appelant un formulaire CVT, comme #FORMULAIRE_TRUC dans un squelette. Les paramètres donné au modèle ne sont PAS des paramètres nommées, mais juste les paramètres du formulaire (les params des fonctions CVT) dans leur ordre dans la fonction.

    • Bonjour,

      Merci pour votre réponse. Vos indications m’ont été précieuses et grâce à ça, j’ai réussi à solutionner ce problème de la façon suivante :

      j’ai surchargé le fichier formidable.php (j’ai seulement modifié la fonction formulaires_formidable_charger) et j’ai déposé ce fichier surchargé au même endroit que le squelette formidable.html (dans le dossier /squelettes/formulaires/) et ça a marché.

      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