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é
167 discussions
J’ai pu reproduire le problème du non respect de l’unicité quand un auteur tente de modifier une réponse qui n’est pas la sienne (et que l’identification est id_auteur).
Voilà le formulaire problématique :
Voilà comment reproduire le bug :
- L’auteur 1 enregistre une réponse « toto » (id 123)
- L’auteur 2 affiche le formulaire rempli avec la réponse 123
- L’auteur 2 valide le formulaire sans changer la réponse « toto »
- Une nouvelle réponse est créée avec « toto » comme réponse, et l’unicité n’est pas respectée
Alors que si l’auteur 2 affiche un formulaire vierge et indique « toto », le test d’unicité est appliqué et la réponse est bien refusée.
Voilà aussi le squelette utilisé modeles/testmulti.html :
Sans regarder le code, je pense comprendre ce qui se passe :
comme on édite une réponse existante, le test d’unicité est valide.
C’est seulement ensuite que l’autorisation de modifier la réponse est examinée, et que la décision est prise d’enregistrer une nouvelle réponse au lieu de modifier l’existante.
On enregistre alors une nouvelle réponse avec un doublon.
bon j’essaie de voir tout cela se week-end
Répondre à ce message
Enfin (et ce sera tout pour ce soir), il y a un bug quand on configure un formulaire avec « Ne pas conserver l’identifiant de la personne connectée. »
Si on change d’avis (après enregistrement des traitements) et qu’on rend le formulaire « Modifiable » avec id_auteur comme méthode d’identification, le champ « Ne pas conserver l’identifiant de la personne connectée. » est caché, mais il reste coché :
Note :
Du coup, quand on enregistre une réponse, c’est id_auteur = 0 qui est enregistré.
Il faudrait juste décocher la case « Ne pas conserver l’identifiant de la personne connectée » quand on la cache.
Répondre à ce message
Bonjour
Je rencontre un problème à la modification d’une réponse quand une personne A modifie une réponse d’une personne B.
Mon formulaire est configuré pour avoir des réponses multiples, et je passe par un modèle pour pouvoir modifier les réponse :
Quand il y a dans l’URL id_reponse=1234 ça permet de modifier la réponse. Sinon, ça affiche la liste des réponses.
Tant que c’est la même personne qui entre une valeur par le formulaire et qui modifie, aucun souci.
Quand « A » modifie une réponse saisie par « B », voilà ce qui se passe :
- une nouvelle réponse est enregistrée pour le formulaire
- en ne vérifiant pas les clauses d’unicité (j’en ai une sur un input_1)
- par la suite, ni « A » ni « B » ne peuvent plus modifier leurs réponses car la clause d’unicité est appliquée
J’ai tenté de cocher « Ne pas conserver l’identifiant de la personne connectée. » mais ça ne change strictement rien. L’id_auteur est toujours enregistré dans la table spip_formulaires_reponses
Comment faire pour ignorer l’id_auteur et permettre la modification par un autre auteur ?
Hum, je ne reproduis pas ce bug. Si j’ai dit de ne pas tenir compte de l’identifiant, Est-ce unformulaire qui date d’avant décembre ? Il y a eu une reecriture du code sur cette fonctionnalité là à ce moment, et peut etre qu’un souci dans la migration.
Par contre, il y dans tous les cas une vérification que l’internaute est bien l’auteur de la réponse : soit par id_auteur, soit par cookie, soit par une autre variable PHP. Je viens d’ajouter dans la version 3.38.0 une option où le passage explicite de l’identifiant de réponse suffit à l’identification.
Reste juste ta question de l’unicité du champ, mais je ne suis pas sur d’avoir compris le problème.
Merci pour ta rapidité !
Par contre, quand je sélectionne id_formulaires_reponse dans la partie « Configuration des traitements », j’obtiens cette erreur après la validation de la page :
Mais ça n’empêche pas le formulaire de fonctionner.
Concernant mon problème de double réponse, je vais tenter de reproduire le problème avec un formulaire simple.
Florence
a oui, la version 3.38.1 corrige cela.
Nickel ! Plus de message d’erreur.
Répondre à ce message
Bonjour
Parfois, je reçois un mail de mon site : Récupérez le plus rapidement possible les fichiers temporaires suivants
Pour le champ f :
avec une liste de fichiers temporaires à récupérer dans ..../tmp/cvtupload
Or ces fichiers ne sont plus présents dans le répertoire, bien que je m’y rende 1 heure seulement après que le mail ait été envoyé.
Qu’est-ce qui produit cette anomalie ?
des difficultés lors du transfer des fichiers entre le repertoir temporaire et le repertoire definitif. J’ai vraiment l’impression que tu as des souci sur ton serveur. Mais par contre c’est bizarre que moins d’une heure après cela soit effacé, car le délai est normalement de 6 heures (réglage via _CVTUPLOAD_AGE_MAX)
Bon, je pense savoir ce qui a pu provoqué le fait que les fichiers disparaissait. J’ai mis une sécurité dans la version 3.37.7 de formidable. Désormais les fichiers sont copiés depuis le répertoire temporaire, et non pas déplacé. Comme cela s’il y a une merde, les fichiers dans tmp/cvt_upload sont conservés.
Est-ce que ton souci arrivait avec des formulaireds ajaxés ? J’ai aussi corrigé un bug dans ce genre de cas.
Répondre à ce message
Bonjour
Je souhaite afficher les résultats d’un formulaire dans une page mais je suis perdu.
Sur un site, j’utilise les noisettes ce qui me permet d’insérer ce code dans un cadre spip :
Sur un autre site, je ne peux pas installer les noisettes mais je dois également utiliser ce même code. Comment dois-je faire ? Où faut-il que j’intègre ce code ou comment dois-je le modifier ? Si je le mets directement dans un article, cela ne fonctionne pas.
Par avance merci
Guietfa
comment ca tu ne peux pas instalelr de noisettes ? pourquoi ?
si tu veux pouvoir executer du code SPIP dans un article, ce n’est pas possible. par contre tu peux te créer un modèle https://www.spip.net/fr_article3454.html#Quelques-conseils-pour-ecrire-un-modele
Je ne peux pas car je ne suis pas administrateur et je n’ai pas les droits.
Oula, le modèle ça à l’air coton... Je vais voir ce que je peux faire mais je sens que ça va me dépacer...
Merci beaucoup pour cette réponse si rapide
sans les droits d’administration / d’envoi de fichier dans les squelettes tu ne pourras rien faire.
Si si , ça, je peux faire ! Je peux ajouter des fichiers dans le squelette
ah !
bah un modèle c’est simple. c’est juste un squelettes
nom.html
dans un dossier modeles.. Ensuite tu appel le modèle via<<nom|>
dans ton article.Evidemment tu remplace
nom
par le nom de ton modèle.Je récapitule :
Dans le dossier modele, je créé un fichier machin.html.
Dans mon fichier machin.html, je copie le code suivant :
Dans un nouvel article, j’appel mes réponses en écrivant : <machin|>
C’est bien cela ?
oui, mais le dossier est
modeles
au pluriel-ok
mais je viens de tester et ça ne fonctionne pas. Ca m’affiche
<machin|>
tu as bien mis ton dossier modeles dans le dossier squelettes ?
Oui il est au bon endroit
Ca y est, j’ai trouvé. Il ne faut pas mettre de majuscule dans le nom du fichier...
Désolé et surtout, merci beaucoup pour ton aide précieuse !
Répondre à ce message
Bonjour
Je n’ai peut-être pas les yeux en face des trous, mais je n’arrive pas à configurer le formulaire de façon à ce qu’après l’envoi, le formulaire vide soit ré-affiché.
Si je choisis « le formulaire à nouveau », le formulaire s’affiche avec les valeurs que j’ai soumises. Cet affichage est ok quand je permets de modifier les réponses. Mais quand les réponses ne sont pas modifiable et que les gens peuvent répondre plusieurs fois, ce n’est pas très adapté. Le risque est grand que les personnes soumettent plusieurs fois la même réponse.
Si je choisis « rediriger vers une autre page » et que je mets le lien vers l’article, j’ai bien le formulaire vide, mais les utilisateurs n’ont pas le message de retour du formulaire.
Est-ce que j’ai loupé un élément de configuration ?
La version 3.37.5 corrige cela. C’était un bug.
Encore merci !
Répondre à ce message
Je viens de mettre à jour Formidable sur un SPIP 3.2.4 (PHP Version 7.1.25) et j’ai un problème d’affichage des réponses sur la page / ?exec=formulaires_reponses&id_formulaire=1
Merci
La version 3.37.4 corrige ceci.
Effectivement, merci à toi
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 : |