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é
811 discussions
La nouvelle version ne marche pas du tous sur spip 3, lors de l’installation il n’arrive même pas a creer la table spip_formulaires ...
Répondre à ce message
Bonjour
J’ai installé la version en développement (ici http://plugins.spip.net/formidable.html), et mon site est sous SPIP 3, squelette zpip modèle greeny.
Dans l’interface privée, voici le message qui s’affiche quand j’essaye de créer un formulaire :
Erreur SQL 1146
Table ’svtbelro_spip.spip_formulaires’ doesn’t exist
SELECT ’’, formulaires.id_formulaire, formulaires.titre, formulaires.identifiant FROM spip_formulaires AS
formulaires
ORDER BY formulaires.titreUne solution ? Quand j’actualise la page pour avancer, d’autres messages enchaînent...
D’avance merci pour vos conseils.
Bonjour. Dans la même veine, est-ce que ce plugin est ou sera compatible Spip 3.
Et aussi, y a il un moyen de passer du plugin forms&tables à ce plugin sans tout refaire (formulaires, personnalisations CSS, traductions…) ?
Merci beaucoup pour votre réponse
Oui il y a un paquet pour SPIP 3, comme l’indique la page officielle d’info du plugin (ici c’est la page de doc) : http://plugins.spip.net/formidable.html
Pour F&T, il y a un formulaire d’importation dans la colonne, qui permet d’importer un export de formulaire de F&T dans son format XML (se reporter à sa doc). Mais à terme je suis censé coder un script d’importation complet sur une même base (cad quand on a F&T installé, que ça aille tout importer, formulaires et réponses, dans les tables de Formidable). Mais il faut du temps... un jour...
OK. Merci pour votre réponse rapide.
Je suis en train de tester, ça a l’air pas trop difficile de passer de l’un (F&T) à l’autre (Formidable).
Jusque quelques trucs à affiner
Répondre à ce message
Bonjour et merci pour ce plugin qui marche très bien chez moi.
Il y a cependant une manip’ que je n’arrive pas a faire, mais qui doit être due à mon incompétence.
J’aimerais créer une page « signaler un abus » pour les commentaires. Sur cette page on rappelle le contenu du commentaire puis on affiche un formulaire de contact.
Je n’arrive pas à afficher l’id du commentaire en question dans la « value » du champ « sujet ».
Si dans « configurer les champs » puis dans « valeur par défaut » je rentre «
Abus sur le commentaire #ID_FORUM
», j’ai alors «#ID_FORUM
» qui s’affiche et non le numéro de l’id demandée.Est-ce faisable ? Avez-vous une idée ?
Encore merci !
Abel
Cf le paragraphe « Pré-remplir dynamiquement les champs d’un formulaire depuis un squelette » dans la doc juste au-dessus. Faut noter le nom informatique généré pour ce champ, et remplir sa valeur dans le squelette. Tu peux du coup bloquer le champ en lecture seule par exemple, et le remplir toi-même dans le squelette.
C’est tout simplement formidable et je n’ai aucune excuse valable.
Merci \o/
Répondre à ce message
Bonjour,
Je voulais vous faire part d’une erreur qui parfois s’affiche sur le site public :
« Aucun squelette formulaires/administration.html n’est disponible... »
Cela pourrait-il être relié à d’autres erreurs mentionnées ?
D’où pourrait venir cette erreur ?
Formidable est formidable, mais il reste manifestement pas mal à faire pour le rendre 100% opérationnel pour les utilisateurs non ableutis (oups, pardon, non avertis ;-)
Répondre à ce message
Bonjour,
Est-ce que je peux faire un formulaire que les visiteurs de mon site ne peuvent remplir qu’une fois par jour, en vérifiant l’adresse IP ou en vérifiant qu’une adresse e-mail ayant déja envoyé une réponse ne puisse pas le faire une deuxième fois dans la même journée mais puisse le faire les jours suivants.
Merci
Chris
oups désolé pour le message doublon, fausse manip !!!
De base il n’y a pas cette option, non. Pour l’instant tu peux juste permettre soit plusieurs réponses, soit qu’une seule réponse.
Il te faudrait surcharger l’autorisation autoriser_formulaire_repondre() en testant depuis quand date la dernière réponse d’une personne, si elle a déjà répondu. Normalement, juste cette fonction devrait suffire. Mais faut programmer ça en PHP, donc.
L’option me convient car mon formulaire ne s’affiche qu’un jour sur le site, c’est un autre qui apparait le lendemain. En testant la fonction je me rend compte que la fonction est trés facile a contourner pour l’utilisateur, faisant appel aux cookies, il suffit de changer de navigateur, ou simplement de supprimer les cookies pour pouvoir re-utiliser le formulaire.
merci
C’est évident, si ce sont des anonymes, il n’y a PAS de manière sécurisée de bloquer l’accès à une même personne : un cookie se supprime, et une adresse IP se change en changeant d’ordi ou en passant par un proxy.
Le seul moyen d’être sûr qu’une même personne (identifiée par son email) ne réponde pas plusieurs fois, c’est d’obliger à avoir un compte et à être connecté pour répondre au formulaire.
Répondre à ce message
Bonjour,
J’utilise SPIP 2.1.13 [19292] et j’ai installé votre excellent plugin en version 0.6.6 [59564] avec JQueryUI 1.8.19 [60972] mais je n’arrive pas à déplacer les champs du formulaire à la souris dans l’espace privé lors de la création d’un formulaire (le bouton Déplacer n’apparait pas comme cela est montré dans le tutoriel sur le site http://spip.arscenic.tv/medias/video-tutorials/article/formidable-mon-premier-formulaire).
Par l’intermédiaire de CFG, ne sachant pas trop quelles librairies de JQueryUI activer, j’ai tout coché mais sans succès. Faut-il cocher uniquement certaines librairies pour que cette fonctionnalité soit active et que le bouton apparaisse, ou y’a-t-il autre chose que j’aurai omis de faire ?
Non normalement il faut juste UI et Saisies à jour (il y a eu des changements de chemins de fichier dernièrement). Donc peut-être en mettant à jour Saisies.
Bonjour RastaPopoulos,
Merci pour ta réponse rapide et efficace.
En effet, en mettant à jour Saisies (en version 1.25.6 [61204]) et en cochant l’option « JQueryUI complet » lors du paramétrage de JQueryUI (par CFG), le bouton « Déplacer » apparaît maintenant et fonctionne.
Répondre à ce message
Bonjour,
Le plugin n’est pas disponible sur http://trad.spip.org ? Il manque pourtant des traductions (pas de version anglaise).
Est-il possible de le mettre en place sur l’interface de traductions ?
Valéry
Oui c’est possible, suffit de commiter sur traductions.txt à la racine.
Par contre comme ya une version SPIP 3 de commencée, ce serait ce trunk qui récupérerait les traductions à priori. Donc pour la version 2.1 il faudra que quelqu’un se fasse les reports.
Répondre à ce message
La gestion des pièces jointes est elle prévue pour bientôt ?
Je m’explique : je réalise mon site et je dois choisir entre formidable et formulaire de contact avancé.
Aujourdui formidable ne gère pas les PJ donc dois attendre un peux ou passer mon chemin ?
Répondre à ce message
Je viens d’installer formidable, j’ai le même problème : ERREUR DE SQUELETTE
=> chrono_diff.spip_formulaires’ doesn’t exist
effectivement aucune table n’a été créé à l’installation.
Merci de mettre à disposition le sql pour la création des tables pour voir si ça dépanne .
Ben il est dans le plugin le SQL, sinon comment veux tu que ça s’installe. :)
Raaaah merde j’ai perdu tout mon message ya que la première phrase qui est partie. :(
Donc je disais : et tes versions ? SPIP ? PHP ? MySQL ?
Ce qui est bizarre c’est que pour une même version plusieurs personnes m’ont dit que ça marchait par exemple en local mais pas sur le serveur. Donc ça dépend pas juste du plugin ce bug, mais d’un élément extérieur (version de PHP peut-être, je sais pas).
Apparemment ça ne serait pas un bug SQL mais PHP car une personne m’avait montré des logs avec des phrases du style : « fonction formidable_declarer_tables_principales() inconnue » comme si ça n’avait pas bien inclue le fichier qui les contient. Et forcément si ça n’accède pas à ces fonctions, ça ne risque pas d’installer grand chose.
J’ai fait 2 installations :
1 => SPIP : 2.1.12, PHP : 5.3.10 MYSQL : 4.1.22 => ça ne marche pas.
voilà ce que l’on trouve dans prive_spip.log
Apr 01 10:37:51 78.192.124.160 (pid 297649) Erreur - ’formidable_declarer_tables_principales’ non definie !
Apr 01 10:37:52 78.192.124.160 (pid 297649) Erreur - ’formidable_declarer_tables_auxiliaires’ non definie !
2 => SPIP : 2.1.12 PHP : 5.2.4-2ubuntu5.12 MYSQL : 5.0.51a => ça marche
Voici le sql dont je parlais, je l’ai récupéré de ma 2d install et exécuté sur la première et ça marche (pour info je ne l’ai pas trouvé dans le plugin,) :
en fait, NON :
On peut créer le formulaire, mais ça ne s’enregistre pas correctement en base
Mais comme le montre le log que tu trouves (et que d’autres m’ont montré aussi) ça a plus l’air d’être une erreur PHP que SQL. Puisqu’il ne trouve pas certaines fonctions, qui pourtant existent dans les fichiers, mais comme si SPIP n’avait pas réussi à inclure ceux-ci avant les appels des fonctions.
Un problème avec PHP 5.3 lors de l’installation ? Mais je vois pas quoi car ce sont de simples « include_spip() » classique à priori, et pourtant ça marche pour les autres plugins. Et je vois pas ce qui a changé dans le code en rapport avec ces fichiers (dans base/).
Bonjour,
Un élément de réponse ? Je viens de me rendre compte que tant que mes sites tournent avec du MySQL5.0 ça va, mais que les derniers sites (lancés sur OVH) sont en MySQL5.1 et que ceux-ci coincent.
Cela pourrait-il être un début de réponse ?
Il ne me semblait pas puisque c’était des erreurs PHP dans les logs, pas des erreurs SQL. Une personne a réussi a faire marcher (sur OVH aussi, tiens tiens tiens) en enlevant certaines lignes vides dans les deux fichiers du dossiers « base/ ».
Pour le cas où cela intéresse : avec PHP 5.3.6 (et MySQL 5.0.8) je n’ai pas eu de problème.
Moi non plus, mais apparemment c’est chez OVH que ça ne marcherait pas, d’après les différents retours qu’il y a eu.
Parmi ceux qui ont eu le bug, y en a-t-il qui ne soient pas chez OVH ?
Ce serveur n’est pas chez OVH mais chez un hebergeur US.
Même problème pour moi sur OVH et sur One.com
lorsque je rentre dans edition formidable plein d’erreurs de squelettes puis des erreures a chaque page du plugin
Et si vous enlever des lignes vides dans les deux fichiers du dossier base/ ça fait quoi ? Au moins celles juste après la balise d’ouverture, et celles juste avant la balise de fermeture.
J’ai testé, j’ai même retiré TOUTES les lignes vides de TOUS les fichiers du plugin... ça ne change manifestement rien à l’affaire...
Je précise qu’il ne faut pas les retirer après coup, mais bien avant toute installation, puisque c’est durant l’installation qu’il ne trouve pas les fichiers où sont décrites les tables. Une personne avait indiquée qu’elle avait ce problème de non-chargement des fichiers PHP et qu’elle avait résolu comme ça (ce qui me semble un peu énigmatique mais tentons).
Bonjour,
Ce plugin porte décidément bien son nom, Bravo !
J’ai rencontré moi aussi les problèmes cités plus haut : utilisation en local OK, bug chez OVH.
(configuration en vigueur actuellement chez OVH : PHP 5.3.10 / MySQL 5.1)
Je confirme qu’après avoir nettoyé les 2 fichiers du dossier base/ de leur ligne vide avant et après les balises d’ouverture, fermeture, la réinstallation du plugin s’opère normalement et il fonctionne alors correctement.
Merci donc pour le partage, et le support !
J’ai pu constaté lors d’une récente installation que le fichier formidable_tables.php était plat (une seule ligne), aussi la création des tables n’était pas opérationnelle.
Après réécriture du fichier, la création des tables se fait normalement.
C’est vraiment bizarre car il n’est NI plat, NI n’a de lignes vides en dehors des balises PHP (normalement c’est ça qui fait planter, les lignes vides à l’intérieur des balises PHP n’ont pas à avoir d’incidence, sinon c’est un bug serveur).
J’ai vérifié tous les fichiers php du plugin sur mon installation, aucun ne présentait l’anomalie constatée et signalée. j’ai également fait un sondage dans les fichiers de spip, pas la moindre trace de fichier sur une seule ligne. Après réécriture du fichier avec bluefish tout est devenu opérationnel.
Cordialement cC
Répondre à ce message
Bonjour,
Merci bcp. pour ce plugin !
Je bute en ce moment à cet endroit dans traiter/email.php (vers ligne 117) :
Or, j’ai un SMTP qui n’est pas restrictif, et un formulaire qui a besoin d’avoir l’adresse de l’envoyeur dans le From et non pas le Reply-to (c’est le cas d’un abonnement à un mailing list LISTSERV).
Est-ce que ce serait acceptable d’ajouter une option pour pouvoir quand même choisir d’utiliser le From ?
Cédric a modifié exprès ce point pour passer certains SMTP : http://zone.spip.org/trac/spip-zone/changeset/58923/_plugins_/formidable/branches/v0
Mais effectivement ça ne concerne pas tout le monde et mériterait de pouvoir être configuré quand on sait à quel SMTP on a affaire.
Ce que je me demande c’est si les plugins qui utilisent Facteur ne devraient pas rester comme ils étaient, et que ce soit dans Facteur qu’on ait ce choix.
Merci de la réponse rapide. Moi je ne vois pas comment faire pour le mieux alors. En attendant, je vais utiliser la version de formidable d’avant la révision 58923.
Mais non ... cela ne marche pas bien avec SPIP 3.
Mon avis c’est que « Envoyer un mail d’inscription à une liste de diffusion » c’est un besoin fonctionnel différent de « Envoyer la réponse au formulaire par email » :
Paolo, je pense donc que ton besoin justifie un traitement particulier proposé dans Formidable. En distinguant les usages on garde des fonctions simples qui font bien une seule chose plutôt que d’essayer de faire une usine à gaz configurable qui fasse tout à la fois.
OK, alors on travaille sur Formidable. Est-ce que toi ou Rasta veut le faire, ou est-ce que je vois ici si on arrive à faire ?
Avec LISTSERV en effet le message (body) doit contenir un texte comme :
SUB TAIZE-FR-L prénom nom
(ce que j’arrive à faire en surchargeant le squelette). Le From doit contenir l’adresse de l’abonné. Et voilà le prob.En fait, en ce moment, les labels de Formidable ne sont pas exactes : « Courriel de l’envoyeur » et « Choisissez le champ qui contiendra le courriel de l’envoyeur » fait penser qu’on peut faire quelque chose qu’on ne peut pas actuellement.
... je vois que Formidable pas localisé en anglais. Ça je pourrais bien faire. Mais ce n’est pas dans le système de traduction ?
« traitement particulier proposé dans Formidable » — bon avec l’aide d’un jeune ami c’est ça que j’ai essayé de mettre en place tout à l’heure.
Ça doit être un truc comme ça :
Un fichier
traiter/diffusion.yaml
qui décrit le traitementUn fichier
traiter/diffusion.php
avec une fonctionAh j’avais pas vu ton commit de ce midi !
Mais Cédric parlait bien dans son message de créer un traitement propre à ton besoin, et non de modifier le traitement existant.
Cf ma proposition ci-dessus, écrit à la va-vite, mais qui colle à peu près.
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 : |