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

    Avec un spip 3.2.12 et formidable 4.15.4, après soumission d’un formulaire, le message de retour ne s’affiche pas du tout. Les valeurs saisies s’affichent bien, elles sont bien enregistrées en base, mais pas du tout mon message de retour.

    Auriez-vous une idée d’où pourrait venir le problème ?

    Le site est multilingue, mais j’ai le même résultat avec un message de retour avec ou sans la balise multi.

    Voilà le code yaml du formulaire :

    id_formulaire: '7'
    identifiant: testfh
    titre: test
    descriptif: ''
    css: ''
    message_retour: Merci
    saisies:
      -
        options: { label: Texte, type: text, size: '40', autocomplete: defaut, nom: input_1 }
        identifiant: '@61e834aa3bddd'
        verifier: {  }
        saisie: input
    traitements:
      enregistrement:
        moderation: posteriori
        moderer_admins: ''
        multiple: on
        modifiable: ''
        effacement: ''
        effacement_delai: ''
        identification: ''
        variable_php: ''
        unicite: ''
        message_erreur_unicite: ''
        anonymiser: ''
        ip: ''
        invalider: ''
        resume_reponse: ''
        analyse_exclure_champs: ''
        identification_reponses: ''
    public: non
    apres: valeurs
    url_redirect: ''
    statut: publie
    date_creation: '2022-01-19 16:56:44'
    maj: '2022-01-19 16:59:58'
    
    

    ET le code HTML produit pour afficher la réponse

    <div class="formulaire_spip formulaire_formidable formulaire_formidable-2">
         <div class="champ afficher afficher_input_1 saisie_input">
            <strong class="label">Texte</strong>
            <div class="valeur ">
    	    <p>fddf</p>
    	</div>
        </div>
        <br>
    </div>

    Répondre à ce message

  • 3

    Hello,
    J’ai hérité d’un poste informatique dans un collège qui utilise un spip plutôt daté.
    Je n’ai pas le droit d’y toucher de peur que cela perde leur base de donnée ou certaines informations auxquelles ils tiennent (sic)

    J’ai du mettre en ligne un article pour des préinscriptions qui utilise un formulaire qu’ils copient et réutilisent d’une année sur l’autre.
    En prévisualisation de l’article via le mode administrateur, le formulaire est là, il marche (j’ai fait un test d’inscription concluant) ; pourtant sur le site public, l’article, les images et pdf s’affichent, mais le formulaire lui, ne marche pas.
    A sa place j’ai le message d’erreur suivant :

    <?php include_once("./" . _DIR_RACINE . "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'), 'section_sport_2022_1642512187'), array('', '', '', '', 'fr', '1')); if ($lang_select) lang_select(); ?>

    J’ai réactivé et enlevé des options, créé un nouveau formulaire test pour vérifier la compatibilité, rien n’y fait. Le nom du formulaire test remplace celui de la « section_sport_2022etc... »

    Est-ce qu’il y aurait quelque chose que je n’arrive pas à capter dans l’inclusion du formulaire ? (les anciens formulaires n’apparaissent plus non plus, mais sans message d’erreur d’inclusion. Mais je ne saurais pas dire, l’ancien informaticien est parti sans laisser d’infos derrière lui...)

    Merci pour votre aide si vous y trouvez quelque chose !

    D.
    (Le site, pour visu, est celui du « Collège Centre » de Gap)
    https://www.clg-centre-gap.ac-aix-marseille.fr/spip2/
    SPIP 3.2.9
    Formidable 4.8.0

    • Comment insère tu le formulaire dans l’article ? Juste pour être sur.

      Mais cela m’a l’air typique d’un squelette qui utilise des #INCLURE à la place de <INCLURE>.

    • Non, pourtant c’est avec les symboles adaptés, les mêmes que pour l’inclusion des images et pdf qui fonctionnent.

      <formulaire|formidable|id=section_sport_2022_1642512187>

      (j’ai mis un formulaire google en attendant, depuis mon dernier post, ce qui a fait disparaitre le message d’erreur sur le site, mais la situation n’est pas rétablie pour l’inclusion du formulaire formidable, hélas)

      Merci pour votre temps !

    • Hum, ok donc l’appel est correct. Mais il faudrait vraiment regarder la construction des squelettes pour savoir s’il y a des #INCLURE ou des #INCLURE

    Répondre à ce message

  • 4

    Bonjour,
    Dans les deux sites sous Spip 3.2.11 que j’ai ici, les exports en CSV ou XLS produisent des fichiers vides (0k), j’imagine que c’est lié au serveur car cela fonctionne sur d’autres sans pb. J’ai testé sous PHP 7.3 ou 7.4 avec le même résultat. Quelles sont les extensions PHP dont il faudrait vérifier l’activation pour cette fonctionnalité d’export ? Ou y a-t-il un dossier temporaire dans lequel sont générés ces fichiers avant l’export ?
    Merci d’avance, Luc

    Répondre à ce message

  • 4

    bonjour,
    Apres un passage à spip 4 les plugins mis à jour j’ai un formulaire dont je n’arrive plus à configurer les champs quand je clique sur le crayon,
    Il s’agit d’une erreur php .

    Fatal error: Uncaught Error: Call to undefined function verifier_lister_disponibles() in /plugins/auto/saisies/v/formulaires/construire_formulaire.php:222 Stack trace: #0 /ecrire/public/aiguiller.php(225): formulaires_construire_formulaire_verifier() #1 /ecrire/index.php(78): traiter_formulaires_dynamiques() #2 {main} thrown in /plugins/auto/saisies/v/formulaires/construire_formulaire.php on line 222

    PS : je suis sur un PHP 8.0
    Pouvez vous m’aider ?
    Cordialement

    • vous avez bien le plugin verifier activé ?

    • Oui ,

      API de vérification 2.0.0 est activé

    • hum, je ne reproduis pas, et en plus en regardant le code je ne vois vraiment pas comment cette erreur peut se produire.

      Je vous suggérerais de desactiver/reactiver les plugins formidables/saisies/verifier.

    • J’ai désactivé / réactivé les plugs en question mais rien à faire tjrs la même erreur !

      Bon sinon je vais tenter dans la semaine une réinstallation de zéro...

      Merci pour les pistes en tout cas

    Répondre à ce message

  • 1

    Bonjour,

    depuis la mise à jour de juin (version 4.15.2 stable), le critère tri_selon_reponse ne fonctionne plus sur mon site. Est-ce qu’il y a une nouvelle façon de trier les réponses ?

    Merci d’avance pour vos réponses

    Répondre à ce message

  • 3

    Bonjour est-il possible de créer un champ extra qui permette un copier coller d’un #FORMULAIRE_FORMIDABLE34 ou plutot

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

     ?

    • Je n’ai absolument pas compris la question :)

    • Je retente.
      Bonjour,
      j’aimerais créer un champs extra qui accepte les modèles de formulaire. Par exemple

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

      . Ces intégrations du formulaire sont valides dans le champs texte, ou chapo d’un article, mais pas dans le champs extra de base

    • Je ne vois pas le rapport avec ici alors, c’est dans le forum de Champs Extras qu’il faut poser la question. N’importe quel champ peut accépter les modèles (les modèles, pas les balises, ça c’est du code pour dev dans les fichiers), ya une option pour ça dans la création du champ.

    Répondre à ce message

  • 1

    Bonjour, c’est par rapport à la langue allemande. Lorsque l’on soumet le formulaire, on a un texte non traduit.

    Il semble qu’il manque l’entrée traiter_enregistrement_message_ok dans lang/formidable_de.php.

    On utilise la version 4.8.0 et il n’y en a pas encore sur la branche master

    Pour l’instant, on a fait un modif en dur avec la traduction : Vielen Dank für Ihr Interesse. Ihre Antworten wurden aufgezeichnet.

    • La traduction ne se fait pas dans le code, mais pas l’application centralisée de la communauté pour ça : trad.spip.net

      C’est (très) loin d’être la seule chaine manquante : l’allemand n’est traduit qu’à 20% pour ce module « formidable » :
      https://trad.spip.net/tradlang_module/formidable?lang_cible=de

      Le mieux est donc de s’inscrire sur l’appli, et de participer à la traduction ! :)
      (et pour le plugin Formidable complet, il y a plusieurs modules de langue, 4 je crois)

    Répondre à ce message

  • 4

    Bonjour,

    Je cherche une solution pour recevoir en ligne des informations émises par des logiciels libres que je développe : ils contiennent un petit tracker pour que je puisse compter les utilisateurs (avec un avertissement tout bien komilfo).

    Jusqu’à cet été, on m’avait fait un truc avec un formulaire de chez l’Ooggle, ça ne me plaisait pas beaucoup. Une commande GET déclenchait une « réponse sur le formulaire » que je pouvais ensuite retrouver dans un tableur en ligne. Mais maintenant ça ne marche même plus.

    A l’April on m’a suggéré de regarder ce qu’il y a comme plugins dans Spip, que je connais bien, qui pourraient m’aider.

    Ma question : en passant par Formidable, puis-je faire remplir automatiquement le formulaire par le même type de commande incluse dans le code de mon application, de manière transparente pour l’utilisateur ? N’est-ce pas inutilement compliqué, il existe peut-être un moyen d’inscrire directement des trucs dans ma base de données ? Mais alors, par un plugin, parce que moi programmer du PHP toussa, c’est pas dans mes compétences...

    Merci de vos avis,

    • Alors, j’ai relu deux fois, mais désolé pour le moment… je n’ai absolument rien compris à ce que tu cherches à faire ! :D

      Je ne comprends déjà pas « une solution pour recevoir en ligne des informations émises par des logiciels libres que je développe »

    • L’intendant zonard

      Hello, pour tenter d’être clair :
      1- dans mon logiciel il y a un tracker
      2- il consiste en une ligne GET envoyée à un OoggleForm, qui au final ajoute une ligne à un tableur
      3- Formidable peut-il recevoir une commande équivalente ?
      4- Ai-je vraiment besoin d’un formulaire, dans le fond tout simplement envoyer en direct une ligne à ma base de données Spip ? Avec quel plugin ?

    • Que ce soit en GET ou en POST, un formulaire n’est déclenché que par son bouton, pas en appelant une URL. Dans le GET de l’URL on peut parfois donner des infos pour préremplir les champs du formulaire mais ça ne l’envoie pas, ça ne le déclenche pas. Et dans tous les cas, les formulaires Formidable sont toujours postés en POST.

      Ton besoin a plutôt l’air d’être une sorte d’API, où quand on requête sur telle URL ça enregistre en BDD. Mais bon pour ça faut un truc un peu sécurisé (avoir une clé d’API ou demander à fournir email/mdp aussi lors de la requête pour être connecté) parce que sinon n’importe qui pourrait remplir la base à l’infini sans aucune autorisation spéciale.

      Il n’y a pas de trucs totalement clé en main pour ça il me semble, c’est trop spécifique. Mais ça va pas se faire avec des formulaires qui sont en POST et qui ne s’activent que par leur bouton submit.

    • L’intendant zonard

      Merci pour cette réponse très claire ! Effectivement le problème c’est de ne pas laisser un trou béant dans la base de données...

    Répondre à ce message

  • 2

    Bonjour,

    Je souhaitais savoir comment limiter le nombre de réponses par personne et par jour.
    En vérifiant l’unicité sur le champ « email » il est simple de limiter a une réponse par adresse, mais je souhaiterais permettre la soumission d’une nouvelle réponse le lendemain.

    Est-ce que quelqu’un aurait une piste svp ?

    • Cette fonctionnalité n’existe pas en tant que configuration. Si tu sais ou que tu connais quelqu’un qui sait coder en PHP, une vérification pourrait être ajoutée (en s’insérer dans le pipeline « formulaire_verifier » pour ce form précis). Mais ya rien de tout cuit.

    • Parfait, merci bcp pour ce retour.

    Répondre à ce message

  • 1

    Bonjour.

    Je voudrais savoir s’il est possible avec formidable de rappeler ou d’utiliser dans une question la valeur d’une précédente réponse.
    Exemple :

    • Choisissez l’une de ses réponses :
      • ( ) 1
      • () 2
      • ( ) 3
        […]
    • Rappel : lors d’une question précédente, vous avez répondu 2.

    Si oui, j’aimerai savoir s’il est également possible de manipuler les réponses précédentes pour créer et afficher des nouvelles valeurs issues de ses réponses précédentes.
    Exemple :

    • Question 1
      • ( ) 1
      • ( ) 2
      • () 3
        -  * Question 2
      • ( ) 2
      • () 4
      • ( ) 6
    • Question 3
      • Vous avez répondu 3 et 4. Si on multiplie ces deux nombre, on obtient 12.

    Merci pour votre réponse.

    • La réponse est non. Mais tu peux afficher certaines saisies en fonction des choix sur les précédentes saisies.

    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