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é
164 discussions
Bonjour
Sur un site, une collègue a conçu un formulaire.
Elle a configuré ce formulaire pour recevoir une notification à chaque réponse et ça fonctionne.
Elle voudrait aussi que le visiteur qui répond reçoive un message de confirmation par mail (en plus du message de retour qui s’affiche). Il y a bien un champ « adresse mail » obligatoire dans ce formulaire.
Est-ce possible ? Et si oui, comment ?
il y a une option d’accués de reception
Ah oui, je l’avais pas vu celui-là !
Merci.
Répondre à ce message
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
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 : |