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
).
Nom de l’option | Fonction | Type |
---|---|---|
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 destinatairesformulaire_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)
Discussions par date d’activité
812 discussions
Bonjour,
J’ai construit un formulaire de contact. Je voudrais savoir, vu que j’ai activé des champs obligatoires, s’il y avait possibilité de retirer le fameux « info obligatoire 02 ».
Merci de votre attention,
Bonne journée.
Répondre à ce message
Salut,
que penses tu d’ajouter suivre_invalideur() dans la fonction d’enregistrement en base, soit de manière automatique soit sous option (« invalider le cache » dans la configuration du traitement).
Ce serait pour répondre à ce besoin : http://article.gmane.org/gmane.comp.web.spip.user/196118
Oui effectivement il faudrait. Mais tu as raison, peut-être en option car ce n’est pas sur tous les sites qu’on a besoin de récupérer les infos des formulaires dans la partie publique, et donc il vaut mieux éviter de péter le cache dès qu’une personne répond à n’importe quel formulaire.
Du coup ça serait à mettre en option du traitement « enregistrement ».
Répondre à ce message
Bonjour,
Merci pour ce plugin très pratique et simple d’utilisation.
Je tombe sur un os qui dépasse mes compétences et je ne sais pas si ce que je veux faire est possible.
J’ai une Bdd alimentée par un module développé en php en périphérie de spip. Un formulaire permet de saisir des sorties de ski qui sont enregistrées dans la base.
Je veux aujourd’hui rapatrier cette fonction de saisie des sorties dans spip en utilisant formidable.
Jusque là pas de problème.
Sauf qu’il faudrait que je récupère les anciennes sorties pour pouvoir faire des recherches sur l’ancienne base.
Cette ancienne table est construite de manière simple. Exemple de quelques champs :
Id_sortie—>valeur
Auteur —> valeur
nom_sortie —> valeur
date —> valeur
etc.
La structure produite par formidable avec deux tables est beaucoup plus complexe, et du coup la structure des données est très différente de ce qui existait précédemment.
Est-ce qu’il y aurait une solution pour envoyer les données, à partir du formulaire formidable, directement dans la table existante sans passer par les tables formulaires_reponses_champs et formulaires_reponses ?
Ou autre solution qui me permettrait de fusionner les nouvelles données avec les anciennes ?
Merci d’avance pour l’éclairage de lanterne.
Il y a un plugin FormiTable, qui ajoute un traitement différent de celui « enregistrement » par défaut, et qui permet de faire correspondre les champs d’un formulaire avec des champs d’une table existante : FormiTable (developpement arrêté)
Ah et il est un peu expérimental, uniquement sur le SVN de la zone. C’est ici pour le voir en web :
http://zone.spip.org/trac/spip-zone/browser/_plugins_/formitable
Ok super ça devrait répondre pile à mon besoin, merci pour le tuyau.
J’ai regardé vite fait, je n’ai pas vu de quoi le télécharger, ça fonctionne comment ? et pour l’install, c’est différent d’un plugin classique ?
Dsl si mes questions sont naïves, s’il y a de la doc quelque part je devrais trouver.
Merci encore.
Soit tu as (et sais) utiliser SVN : c’est dans le SVN de SPIP-zone (la doc est sur le wiki de spip-zone normalement pour apprendre, sinon il doit y avoir de la doc sur contrib).
Soit il me semble que Trac sait générer des ZIP à partir de ce qu’il a du SVN :
http://zone.spip.org/trac/spip-zone/changeset/latest/_plugins_/formitable?old_path=/&format=zip
Non, SVN c’est du chinois pour moi. Je vais investiguer merci.
SVN c’est du chinois pour moi, je vais investiguer merci.
Répondre à ce message
bonjour,
je rencontre un problème lors de l’export des réponses à un formulaire (je précise : après avoir réinstallé tout mon spip et restauré la bdd)
je récupère bien le fichier .csv ou .xls, mais dans les 2 cas les caratères ne sont plus lisiles (quelque soit l’encodage utilisé)
une idée (c’est assez embêtant)
merci infiniment pour votre aide
Ah quand il commence à y avoir des problèmes d’encodage, difficile d’imaginer des solutions sans avoir les mains dans le cambouis et tester plein de choses. Il faudrait déjà voir comment c’est encodé à l’intérieur de la base de données, dans les tables.
bonsoir,
oui j’avais bien pensé à l’encodage, mais je suis en utf8_general_ci : coté spip et bdd.
c’est apparu après avoir réinstallé spip et restauré la base
Je ne sais pas ça peut aider à la compréhension, mais lorsque je récupère via ftp le fichier généré par l’export dans /www/tmp/cache/export le problème n’apparait pas.
Répondre à ce message
Bonjour et merci pour votre travail.
Je rencontre un problème, je pense que c’est depuis la maj en php 5.4.45 (herbégé chez ovh)
lors que je valide une réponse à un formulaire, j’ai l’erreur suivante qui s’affiche :
Strict Standards : Non-static method Facteur::html2text() should not be called statically in /home/monsite/www/plugins/formidable_v0/formidable_v0/traiter/email.php on line 109
mon spip est en 2.1.11 et formidable en 0.8.6, facteur en 1.8.9 et les autres plugins associés à jour.
Une idée ?
Merci d’avance pour votre aide
Malheureusement je n’ai plus de SPIP 2.1 depuis longtemps pour pouvoir tester. Mais il s’agit d’une erreur liée à une mise à jour des fonctions du Facteur et qui avait déjà été corrigé sur l’utilisation dans Formidable ensuite. Peut-être que ça avait été adapté sur le Formidable pour SPIP 3 mais par reporté pour la version pour 2.1… je ne sais plus. Si tu as déjà toutes les dernières versions de tous ces plugins, ce serait le cas.
Répondre à ce message
Bonjour,
merci pour ce plugin très très très utile !
J’aurai besoin de plus d’explications pour la mise en forme des mails.
En faite pour des formulaires longues, les mais envoyés avec formidables peuvent venir assez peu maniables. Surtout en plus du mail, en version imprimé, qui donne souvent plusieurs feuilles avec beaucoup de blanc (même si seulemet un champ rempli).
Premièrement je souhaiterai pouvoir enlever les champs « sans reponse », qui sont pratiquement toujours inutiles.
Puis mettre titre et réponse sur une seule ligne, avec un deux-points derrière le titre.
Je présume que tout cela se trouve derrière #VOIR_SAISIES#ENV*saisies, #ENV*valeurs ? Donc pas possible de faire la mise en forme seulement dans les fichiers dans notifications ? Ou qu’est-ce qui m’échappe ?
d’avance merci pour vos éclaircissements
joz
ps : Le top serai d’en plus pouvoir inclure les résultats en csv dans le mail :)
Salut,
je suis toujours à la recherche de réaliser un mail de réponse avec une meilleur mise en page.
Est-ce que ce que je décris ci dessus est en faite faisable avec formidable ?
Merci d’avance pour une réponse
: )
joz
Yo,
en fait #VOIR_SAISIES c’est vraiment un truc tout-en-un qui fait tout d’un coup.
Si on veut faire plus précis, faut faire à la main et c’est un peu plus compliqué. Il y a plusieurs choses mais c’est incomplet :
Du coup il manque un truc dans ’lune ou l’autre des balises pour pouvoir afficher la vue de la saisie mais en donnant le tableau complet de la saisie directement (voir en allant le chercher juste avec son nom comme pour voir_reponse).
Mais désolé je n’ai pas de code clé-en-main à donner pour l’instant. Il me semble qu’on avait déjà parlé de ce genre de chose sur la liste spip-zone et peut-être que quelqu’un avait déjà un code, je ne sais plus, de mémoire, là. :(
Bonjor,
je reviens encore à ce sujet ...
Est-ce qu’il ne serai pas possible de ne pas inclure les champs du formulaire dans le mail d’accusé de réception ? Cette longue liste de « sans réponse » semble perturber pas mal d’utilisateurs de notre site.
Et dans le mail vers le gestionnaire du formulaire : au lieu d’un mail avec tout le résultat du formulaire*, un lien vers la page du résultat : ?exec=formulaires_reponse&id_formulaires_reponse=xxx
Et là je pourrai gérer l’affichage avec des boucles, non ?
merci (1000* pour ce plugin et tout !)
joz
* car il l’imprime à chaque fois.. et ça fais beaucoup de papier gâchis avec des fueilles remplis des « sans reponse »
Les deux emails (l’accusé et aux admins) sont déjà en squelette, donc personnalisables. Évidemment c’est un peu « tordu » car pour ne pas avoir le comportement par défaut, je suppute qu’il faut faire un peu plus de boucle que juste l’appel à la fonction de « vue » des réponses d’un formulaire complet, mais c’est possible.
Et pour le lien, on peut pas vraiment car le traitement email et le traitement enregistrement sont deux choses séparées et indépendantes, on peut avoir l’un sans l’autre et ya pas d’ordre, on peut pas dans l’email savoir s’il y a eu une réponse enregistrée en base (ce n’est pas obligatoire) ni à fortiori savoir son identifiant pour trouver l’URL d’admin. C’est possiblement un truc à améliorer, par exemple en permettant aux traitements de déclarer un ordre (et que donc le traitement email soit toujours en dernier, ce qui permettrait d’essayer de trouver des infos sur les traitements précédents). Voilà voilà…
Répondre à ce message
Bonjour,
Un gros formulaire tourne depuis deux ans sans aucun souci. J’ai une petite modif à faire (enlever une option radio)
Quand je fais « Configurer les champs » c’est un peu le boxon. Les barres d’action de chaque champ (move, edit, del) sont toutes les unes au dessus des autres en haut à droite de la div d’édition.
impossible de modifier mes boutons radios donc et je fais la modif en sql sur la table spip_formulaire, ça me dit que le formulaire n’est pas configuré.
ce problème d’affichage reste identique en chrome, firefox ou edge
Je suis à jour du plugin Saisies (c’est lui qui contient le constructeur), et je ne reproduis ça nulle part sur plusieurs sites qui l’ont.
Désolé pour le bruit.
J’avais travaillé sur le fichier « _base » qui s’était retrouvé dans mon dossier squelette.
En revenant au plugin vierge, toutse passe bien.
Merci pour ta réactivité et pour ce chouette plugin Rasta !
Répondre à ce message
Bonjour,
J’essaie d’intégrer un formulaire avec dépliage des éléments en fonction de choix checkbox. Dans l’espace privé de SPIP je n’ai aucun soucis, mais en public aucune mise en forme et tout est déplié. Comment puis-je récupérer la feuille de style du BO pour l’intégrer à mon interface publique ?
merci :)
Aucun rapport avec une feuille de style à priori, car c’est du javascript.
Si tout est déplié c’est que le javascript qui masque les champs ne se lance peut-être pas, possiblement car Javascript est planté à cause d’une erreur bloquante venant d’un autre script. Il faut regarder dans les outils webdev de Firefox par exemple, dans la console javascript, pour voir s’il y a une vilaine erreur toute rouge.
Yep j’ai ces erreurs là :
Commun à SPIP ? Accessoirement mon site utilise le framework de Boostrap...
Je ne sais pas trop, mais c’est peu probable que ça vienne des quelques lignes de JS de Formidable puisque la fonction de champs conditionnels fonctionne dans de nombreux sites.
Mais pour tester une fonctionnalité, c’est toujours pareil, il faut d’abord désactiver tous les autres plugins non nécessaires (comme expliquer dans le lien « Les choses à faire avant de poser une question »). Il faut tester avec un SPIP sans rien sauf le ou les plugins à tester (quand il y a des dépendances). Puis ensuite réactiver petit à petit les autres plugins pour voir lequel fait planter.
J’ai résolu le problème en supprimant mon fichier Jquery dernière version de mon head (bon j’ai fait un 2e head pour certains articles).
Répondre à ce message
Dans quel fichier faut-il bidouiller pour qu’au focus dans un champ la valeur par défaut s’efface ?
Merci
Une valeur par défaut, c’est vraiment une valeur pré-remplie qu’on va valider. Si c’est juste un exemple de remplissage qui disparait automatiquement, toi tu parles d’un placeholder.
Répondre à ce message
Bonjour,
Je ne sais pas si c’est un problème de configuration : après avoir envoyé le formulaire, les valeurs saisies s’affichent avec un message de retour. Jusque là tout va bien.
Mais quand on rafraichis cette page, la saisie est enregistré une deuxième fois dans la bdd. Est-ce qu’il y a moyen d’éviter cela ?
D’avance merci
Ben ça n’a pas de rapport avec Formidable : ça fait normalement ça pour à peu près n’importe quel formulaire de n’importe quel page HTML au monde : quand on valide un formulaire, et qu’on fait F5 sur la page où l’on arrive, ça relance l’envoi (POST) du formulaire. D’ailleurs, ça dépend des navigateurs, mais sur Firefox par exemple, il te demande explicitement si tu es vraiment certaine de vouloir renvoye/reposter le formulaire dans une fenêtre qui s’ouvre (ce qui permet de ne pas le faire par hasard), après dans les autres navs je sais pas…
Ah ok, merci pour la réponse.
++
j
ps : tout les Firefoxes n’ont pas l’air d’afficher ce message.. celui au bureau ne l’affiche pas, mon privé bien.
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 :
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.
Suivre les commentaires : |