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
Re-Bonjour,
Encore une question !
Mon formidable formulaire de contact se trouve au bas d’une page assez haute... Lorsque l’on l’utilise, on se retrouve en haut de la page et le formidable formulaire n’est plus visible... Ce qui n’est pas heu... formidable !
Serait-il possible de l’ajaxer ? Si oui, comment ?
Pour info, dans l’adresse de retour, j’ai essayé de mettre une ancre ( genre #monancre ), mais ça n’a pas amemé la page à l’ancre...
Ceci-dit, je crois que je préfèrerais l’ajaxer en sachant que ce formidable formulaire est inclus dans un article...
Merci d’avance de votre aide !
Tout comme n’importe quel formulaire de SPIP (oui n’importe lequel !), il suffit de l’inclure dans un bloc ayant la classe « ajax » pour qu’il se lance en AJAX. Magique. :D
Merci ! Je teste ça tout de suite !
Tu es formidable RastaPopoulos !
Pour info, je venait d’essayer
<formulaire|truc|ajax>
...Peut être une piste à creuser ;-)
Encore merci et bonne journée !
Répondre à ce message
Bonjour,
J’ai utilisé Formidable pour un formulaire de Contact.
J’ai choisi d’enregistrer les réponses.
J’ai fait quelques essais, les réponses sont bien en enregistrées... Mais avec le statut ’Publié en ligne’...
Est ce que cela veut dire que l’on peur rendre public ces réponses via un squelette à développer soit même ( ce qui peut avoir sont intérêt ! ) ou bien sont elles visibles via un squelette déjà implémenté dans le plugin ? Le dernier cas serait gênant pour nous... Les gens nous contactent, nous et pas la terre entière ! D’autant plus que leurs emails est obligatoire... On veut pas non plus les répandre...
Merci d’avance de vos éclaicissements à ce sujet !
Non il n’y a aucun squelette de réponses pour le site. Le statut permet de voir ces réponses si on boucle publiquement sur la table des réponses, alors que sinon, non. Mais c’est à chacun de le faire.
Super ! Merci de ta réponse si rapide !
Répondre à ce message
Bonjour,
Je ne sais pas pourquoi mais le plugin ne veut pas marcher malgré l’installation de tous les plugins nécessaires (facteur, vérifier, saisies, yaml, bonux) sous mon site en spip 3.
J’obtiens ce type de message d’erreur sur la page même du formulaire : Fatal error : Unsupported operand types in [...]/plugins/formidable_1_0/formulaires/formidable.php on line 54.
Quelqu’un aurait déjà eu ce type d’erreur et pourrait me donner un petit coup de pouce ?
Merci bien
Mauvais version de PHP ?
Bonjour
J’ai le même problème...
Mon site est sous php version 5.1.3RC4-dev
Y-a-il une solution ?
Merci d’avance
Changer de version de PHP ou changer d’hébergeur, ya pas d’autre solution rapide, je crois.
Quelle version de php est compatible ?
Merci
Au minimum la 5.2 il me semble.
Merci pour l’aide, et pour la rapidité !! Je vais étudier çà, mais étant donné que c’est un site qui « tourne » déjà puisqu’en ligne depuis un moment, je vais peut-être pas me lancer dans un déménagement d’hébergeur. Je vais voir, mais encore merci pour cet éclairage !
Répondre à ce message
Bonjour et merci pour ce plugin. Je souhaite l’utiliser sur un site d’école ais j’ai un soucis. Une fois le formulaire valider, je retombe sur une page blanche et je ne reçois rien, ni l’envoyeur.
La page blanche correspond bien à l’adresse URL où il y a l’image.
J’ai demandé que cela affiche les valeurs saisie.
L’uRL en question : http://www.ac-grenoble.fr/ecole/74/saint-cergues/spip.php?article295
Merci du coup de main
Jérôme
Répondre à ce message
Bonjour,
Lors e l’exportation yaml tous mes accents sont codés html. Dans phpmyadmin, le texte est bon. Comment faire ? Que faire ?
Merci
Robert
Répondre à ce message
Sur un site bilingue français english, le formulaire affiche bien required mais si un champ est oublié il affiche en français Veuillez compléter ce champ. Où puis-je aller traduire cela ?
Merci
RP
Euh ben je sais pas, c’est toi qui l’a mis cette phrase non ? Ça ne me dit rien comme faisant partie des chaînes par défaut.
Répondre à ce message
Bonjour,
quand j’envoie un message à partir du formulaire, après avoir cliquer sur valider ce message s’affiche sur le site « Votre demande d’inscription a bien été prise en compte, nous vous répondrons dans les meilleurs délais. Merci de noter ces références : » Alors ma question ou je peux trouver le fichier qui gère ça ?...Merci
Qui gère quoi ?
Merci pour la réponse,
Le fichier qui gère ce message de confirmation d’envoie à savoir « Votre demande d’inscription a bien été prise en compte, nous vous répondrons dans les meilleurs délais. Merci de noter ces références : »
Ben ya pas de fichier précis qui gère ça. C’est une phrase à configurer dans les champs de chacun des formulaires. Ya une phrase par défaut quand cette config est vide. Et quand elle est pas vide c’est ta phrase qui est prise en compte.
Merci pour la réponse, alors c’est quasi impossible de récupérer l’id_formulaires_reponse et la date et heure de l’envoie juste après cette phrase ?
Une autre question dans le fichier formulaire_email je peux récupérer #ID_FORMULAIRE mais pas
#ID_FORMULAIRES_REPONSE est ce normal ?
Pour le message de retour du formulaire, le seul moyen vraiment propre serait de s’insérer dans le pipeline « formulaire_traiter » pour ce formulaire là et de modifier la valeur de « message_ok ». Mais pour ça faut le coder en PHP évidemment.
Pour l’id de la réponse dans les mails (d’envoi ou d’accusé de reception) c’est tout à fait logique : ce sont deux traitements totalement différents et on peut parfaitement activer l’envoi par mail SANS qu’il n’y ait d’enregistrement en base (ou inversement).
Faudrait aller chercher la dernière réponse en base (mais si 4 personnes répondent en même temps je sais pas si c’est fiable). Ou bien faire une vérif avec un des champs, comme l’email par exemple.
Merci pour cette réponse, je pense que je laisse tombé pour le message de retour :) mais j’essai de recupérer l’id_formulaires_reponse avec cette boucle
Mais il prend le dernier enregistré dans la base et non celui que j’envoie et j’avoue que c’est logique :) Si on pouvait retardé la notification je pense que serait mieux
Ouais, on pourrait remplacer l’appel à « envoyer_mail » par une programmation de la même fonction (avec job_queue_add) mais disons… une minute plus tard par exemple, le temps que les autres traitements se terminent (que ce soit l’enregistrement en base ou d’autres persos).
C’est une bonne idée.
a priori les traitement se font dans un certain ordre nom ? pas en // ?
Donc est-ce qu’on ne pourrait pas envisager de préciser l’ordre des traitements. Par ex 1. Enregistrement en base 2. Courriel ?
Ça fait un peu usine à gaz si on doit spécifier ça. Et n’importe qui peut ajouter des traitements, chez lui ou dans des sous-plugins. Que ce soit spécifié par le dev ou pire par une interface par l’utilisateur, ça me parait lourd.
Là pour les emails, il suffirait juste de programmer envoyer_mail() 1min ou 2 plus tard, au lieu de l’appeler directement. En plus sur des gros sites (ou sur les mauvais hébergements), c’est toujours mieux que les choses soient programmées, plutôt qu’appelées telles quelles, parce que ça rend la réponse plus rapide.
effectivement sur le second pt. Mais est-on sûr que le nombre de visite d’un site sera suffisant pour lancer le cron et du coup la tâche.
Et quid des cas où il y a plusieurs enregistrements en // ? En fait, il faudrait que chaque validation de formulaire est un identifiant numero unique, indépendament du traitement effectué.
Bonjour,
Comme ma boucle prenait le dernier enregistrement et non celui que je suis entrain d’enregistré j’ai incrémenté +1, alors la boucle devient :
Ah ouais @maieul pourquoi pas. On pourrait générer une valeur unique avant d’appeler les traitements et l’ajouter au tableau des arguments envoyés à tous les traiter/truc. Mais faudrait qu’il soit enregistré dans spip_formulaires_reponses aussi, en plus de l’id SQL.
Oui ... genre un hash des données + date d’envoi.
Répondre à ce message
Comment fait-on pour extraire un résultat (valeur) du formulaire et l’afficher dans le formulaire-accuse ou _email en dehors de #VOIR_SAISIES... qui affiche tous les résultats ?
Sinon bravo et merci pour ce formulaire !!
#VOIR_SAISIE{type,nom}
Oui mais pour VOIR_SAISIE faut la valeur aussi dans l’environnement, c’est un truc générique à Saisies. Là pour l’instant maintenant tout de suite, il n’y a pas de fonctions ou balises « facilitatrices » pour avoir les réponses d’un champ précis en un seul appel. Pour le moment faut boucler sur la réponse en question, puis sur les champs de la réponse (formulaires_reponses et formulaires_reponses_champs).
Mais il serait effectivement intéressant d’avoir une balise qui permette d’afficher telle ou telle réponse précisément, ou de récupérer le tableau de valeurs de réponses d’un coup. Enfin je sais pas trop encore mais un truc plus rapide.
Je serais vraiment intéressé par cette balise.
Avec mes petites connaissances, j’ai essayé ceci sans succès (pour afficher la valeur de selection_2) :
si tu remplace
#GET{valeurs}
par#VALEURS
cela devrait aller mieux ...Répondre à ce message
Bonjour
sur cette page http://www.artas.org/?Contact-avec-l-ecole-Art-As j’ai deux boutons correspondant à deux choix possibles de destinataires, mais tous les deux peuvent se cocher en même temps, hors je voudrais qu’un seul des deux puisse être coché, qu’il n’y ait qu’un choix possible sur les deux.
Si dans la partie édition du formulaire je mets : « Permettre à l’utilisateur de choisir un seul destinataire. » je perds les cases à cocher et me retrouve avec un menu défilant que je ne trouve pas approprié tel qu’il est, comment rester avec les deux cases et n’avoir qu’un choix possible ?
Ou alors garder le menu défilant mais qu’à la place du premier destinataire apparent dans la fenêtre il y ait la possibilité de mettre une indication par exemple ?
merci d’avance pour votre aide
Cordialement
Bonjour
Mes questions ne trouvent vraiment pas de réponses !?
tu es sûr que tu utilise formidable pour ce formulaire et pas « formulaire de contact avancé » ?
Bonjour Maïeul
Oui, je n’ai rien d’autre que ce formulaire !
bah ce que ce n’est pas prévu. Il faut qu’on modifie le plugins saisies pour cela. Peut etre aurais-je du temps ce soir.
Ben un seul choix = liste déroulante, et plusieurs choix = case à cocher. C’est comme ça depuis le début dans cette saisie. mais jmpasso lui voudrait des boutons radios (= choix unique comme la liste déroulante mais avec tout visible).
A minima il faudrait au moins rajouter la même option que pour la saisie « selection » : option_intro. Si cette chaîne est présente, alors on afficher l’option intro dans la liste déroulante. Un truc comme ça.
Après on pourrait aussi imaginer une quatrième option « type_choix » pour la saisie « destinataires », qui serait : un_radio (par exemple). Et qui produirait des input radio à la place de la liste déroulante.
oui, je pensais bien mettre des boutons radios.
je mettrai aussi option_intro.
pour jmpasso : le changement est effectif http://zone.spip.org/trac/spip-zone/changeset/76523. Attendre 22 h pour avoir le zip de saisies à jour, et 00h00 pour que cela soit proposer automatiquement dans la config de plugins. Tu aura alors un nouveau choix.
Super Maïeul !
Merci beaucoup, c’est ce que j’attendais.
Répondre à ce message
Bonjour,
Est il possible d’indiquer le numéro id du formulaire et la date et l’heure à laquelle le formulaire à été posté dans le message de confirmation quand on envoie ?? Si oui, merci de me dire quoi faire.
Merci d’avance pour votre aide
Comme expliqué ci-dessus, tu peux surcharger le squelette qui génère le corps du message de confirmation, et ajouter ces informations. Tu le copies colles dans ton dossier squelettes/, soit avec le même nom, soit en ajoutant l’identifiant d’un formulaire précis (cf la doc au-dessus) pour que ça ne s’applique qu’à ce formulaire-là. Et donc dedans tu vois que tu es dans la boucle d’une réponse précise à un moment donné, et dans cette boucle tu as accès à ces informations avec les champs #ID_FORMULAIRE et #DATE.
Bonjour,
Merci pour la réponse, mais comme je suis nul, il me faut encore quelques réponses
1/ quel est le fichier qui gère le message de confirmation ??
Si c’est formulaire_email je ne vois aucune boucle de réponse laba
J’ai crée un répertoire notification dans mon squelette et copie/colle le fichier formulaire_email mais marche toujours pas....MErci encore de votre aide
Je reviens, le problème est réglé, c’est bien le fichier formulaire_email, seulement c’est le mail de l’accusé de réception que je vérifié mes tests :) Merci encore
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 : |