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
Hello,
D’abord merci pour ce superbe plugin !
J’ai cependant une petite question / remarque / problème... Pour défininir la valeur d’un champ « hidden », je passe en GET dans l’URL un paramètre « id_champ_machin » et je loade la valeur comme expliqué dans la doc lors de l’appel au formulaire :
#FORMULAIRE_FORMIDABLE{mon_formulaire, #ARRAY{hidden_1, #SELF|parametre_url{id_champ_machin}}}
Jusqu’ici, tout va bien, la valeur du champ est bien settée...
Le problème se produit au submit :
* la réponse en BDD est bien enregistrée
* mais côté front, on ne voit pas apparaitre le message de confirmation ni ce qui est défini dans les paramètre de traitement du formulaire : le formulaire reste affiché et réinitialisé
J’ai remarqué que si on avait le paramètre « var_mode », celui-ci était bien nettoyé au submit, mais pas les autres paramètres présents dans l’URL, et j’ai l’impression que le problème vient de là.
Est-ce qu’il s’agit d’un bug ou je m’y prends mal ?
Merci !
Répondre à ce message
Bonjour, je viens d’installer le plugin et j’ai 2 problèmes :
- Je n’arrive pas à changer le statut de publication du formulaire (proposé à l’évaluation, publié en ligne, etc). Je sélectionne un statut et clique « changer », mais le statut reste sur le choix « vide » du select, et quand j’essaie de publier mon formulaire du coup rien ne s’affiche.
- Je n’arrive pas à déplacer les champs « explication » a la souris, et lorsque j’édite un champ explication, les onglets « Affichage etc » sont décalés vers la gauche et on ne peut pas éditer correctement. Je suis sous Debian Testing avec les dernières versions de Chrome et Firefox.
Pas d’idée d’où pourrait provenir le problème ?
Je ne peux pas avancer... pas d’erreur apparente, ni dans les logs PHP ni dans le debug de Spip
« Les choses à faire avant de poser une question » :)
Ok ok pardon... :)
- J’ai désactivé tous les plugins puis réactivé Formidable (et ses plugins dépendants)
- Je suis sous SPIP 3.0.17, PHP 5.6.7-1, Formidable 2.9.0 - stable, MySQL 5.5.43-0+deb8u1, API de vérification 1.0.7 - stable, Facteur 3.0.20 - stable, Saisies pour formulaires 2.3.1 - stable, SPIP Bonux 3.1.0 - stable, YAML 1.5.2 - stable
- Je travaille en localhost, je ne peux pas fournir une URL de test
- Mon problème est sur la partie privée du site, impossible de changer le statut de publication des formulaires. Aucun message d’erreur ne s’affiche
- Pas d’erreur non plus dans les logs PHP / Apache
Est-ce que je peux fournir d’autres informations ?
Pour le deuxième point ça peut avoir à voir avec les multiples modifs d’hier. Il faudrait mettre à jour Saisies qui a encore bougé ce matin… À voir… :)
Par contre pour le premier point, là comme ça je ne vois pas de rapport avec les modifs faites hier car le formulaire de changement de statut est fabriqué par SPIP, pas par le plugin lui-même.
J’ai mis à jour tous les plugins qui avaient des mises à jour, mais ça n’a pas change le problème.
Quand je vais dans l’édition des formulaires, je n’ai aucun formulaire listé, alors que ceux que j’ai créé sont bien dans la base de données, je les vois dans la table spip_formulaires
J’ai fini par effacer manuellement les tables sql du plugin, puis effacer le plugin, puis réinstaller, et maintenant j’ai 2 fois cette erreur qui apparait :
Il n’y a jamais eu de champ « id_rubrique » dans le formulaire, donc je ne vois pas du tout d’où sort cette requête et ce qui fait que ce champ est ajouté à la demande… :(
Merci pour ton retour.
Je travaille actuellement sur la refonte d’un site, je vais demander aux développeurs s’ils ont fait des modifications qui pourraient avoir un lien avec cette erreur.
Répondre à ce message
Bonjour,
J’ai migré mon site de la version 2.1 vers la version 3 de SPIP ; Tout marche bien avec ce plugin, mais quand je vais dans l’interface privée, les champs dépassent des limites du cadre en largeur, ce qui fait que je ne peux pas modifier les champs, car je n’arrive pas à accéder aux onglets extrèmes.
Le problème apparaît sous Firefox et IE sous Windows 7.
J’ai modifié le zoom du navigateur, mais le problème subsiste.
Avez-vous une idée ?
Merci,
Bien cordialement,
Bruno.
Je ne reproduis pas, est-ce toujours le cas avec les dernières versions des plugins, et notamment de Saisies puisque c’est là qu’est le constructeur ?
Bonjour,
Le problème est bien résolu avec les dernières versions.
Merci !
Bien cordialement,
Bruno.
Répondre à ce message
Bonjour,
Je ne sais pas si c’est moi mais j’ai des soucis de formatage :
Si j’indique @nom_site_spip@ dans le champ Sujet du message ou dans Nom de l’expéditeur de l’accusé de réception dans les emails reçus cela apparait tel quel.
Donc j’ai remplacé par le nom du site en dur mais (pas de chance) les caractères accentués du champ ne sont pas en UTF8. (Léon au lieu de Léon) dans le champ Nom de l’expéditeur de l’accusé de réception.
Dans le sujet du message c’est OK pour l’encodage..
Autre chose : les blocs du formulaire ne veulent pas pas être repliés (la compression html n’est pas activée sur le site).
et,les titres des blocs « groupe de champ » apparaissent en double dans les emails reçus.
dd
Pour Sujet de l’accusé c’est bien remplacé :
http://zone.spip.org/trac/spip-zone/browser/_plugins_/formidable/trunk/traiter/email.php#L149
Mais pas pour le nom apparemment. C’est le bazar ce vieux code, il faudrait mutualiser actions similaires dans une fonction à part je pense.
Pour l’UTF là par contre je vois pas.
Répondre à ce message
Bonjour,
Je souhaiterais réutiliser les données de mon formulaire directement sans passer par l’export en fichier csv. Je n’arrive pas à trouver l’endroit où la base de donnée de mon formulaire est enregistrée par le plugin. Pourriez-vous m’aider ? Merci
Dans
(FORMULAIRES_REPONSES)
(infos communes à chaque réponse) et(FORMULAIRES_REPONSES_CHAMPS)
(nom=>valeur de chaque champ)Répondre à ce message
Bonjour
Merci pour ce super plug-in !!
J’ai un petit souci avec l’accusé de réception, je souhaite personnaliser le mail avec une des réponses du formulaire, en l’occurrence une réponse via une liste déroulante. Je mets donc :« Formulaire concernant @selection_1@ »
Par contre le mail affiche « Formulaire concernant choixX » par exemple plutôt que l’intitulé de la réponse. Je m’y prends mal ?
Merci d’avance
Non c’est un bug effectivement dans le remplacement des @. Ça va chercher la réponse brute qui est stockée, ce qui fonctionne pour les champs libres mais pas pour les saisies avec des choix. Car c’est donc l’identifiant (value) de la réponse qui est utilisée, et non le label humain. C’est donc un truc à corriger.
Répondre à ce message
Bonjour,
Je débute dans l’utilisation des formulaires pour mettre en place une procédure de dons sur le site http://www.cubacoop.org/
J’utilise les plugins ;
Formidable 2,8,0
Saisies pour formulaires 1.42.1
YAML1.5.2
Transaction 0.3.1
Facteur 3.0.14
Mes premiers test semblent satisfaisants mais j’ai le message d’erreur ci-dessous lorque j’essaye d’exporter la liste des saisies :
Strict Standards: Non-static method Facteur::html2text() should not be called statically in /homepages/19/d147752321/htdocs/cubacoop/plugins/auto/formidable/v2.8.0/action/exporter_formulaires_reponses.php on line 71
Une idée pour corriger cette erreur ?
Le formulaire peut être testé ici
Problème de version de PHP qui montrait plus d’erreur. Je pense qu’en mettant à jour Facteur ça devrait aller.
Répondre à ce message
Bonjour,
Existe-t-il une possibilité pour exporter la liste des réponses en fichier joint à une adresse mail ?
Non, en revanche toutes les réponses sont téléchargeables en tableau pour les admins dans l’interface. Mais ya pas d’automatismes pour les envoyer par email toutes en même temps.
Répondre à ce message
Bonjour, comment surcharger un champs avec l’id de la réponse ?
Merci
Pas compris la question. :)
Oui pardon ce n’est pas très explicite...
Je voudrais pouvoir renvoyer par mail, ou mieux afficher dans le formulaire l’id de la reponse (qui est générée à l’enregistrement de la réponse)
à la place de mon id_auteur qui me sert de test
#FORMULAIRE_FORMIDABLEdamage2,ARRAYinput_5,#SESSIONid_auteur
Il y a cette fonction qui permet de récupérer les réponses d’une personne pour un même formulaire. Peut sortir plusieurs ID par contre, faut prendre la dernière. Normalement le fichier dans « inc » est chargé lorsque le formulaire est sur une page, sinon faut trouver un moyen de le charger.
Salut et merci beaucoup pour les réponses (je ne vois pas le code de ta fonction évoquée).
En fait c’est pour gérer l’anonymat medecin/patient, donc plutôt que le dernier ID des réponses d’un utilisateur, c’est plutôt le dernier id des réponses au formulaire en question que je vais exploiter..
j’avais penser récupérer cet id reponse avec la boucle ci dessous (j’ai enlever les <> car ça passe pas) et rediriger à la fin du formulaire rempli vers une page html du style :
BOUCLE_A(FORMULAIRES)identifiant=test
BOUCLE_reponses(FORMULAIRES_REPONSES)id_formulaire
/BOUCLE_reponses
#SETnbreponse,#TOTAL_BOUCLE
//B_reponses
/BOUCLE_A
« #EDITtexte texte »>Merci, votre reponse est enregistree sous le numero #GETnbresponse
ainsi il note le numéro d’id que le gestionnaire de l’étude retrouve dans la fiche de la réponse de l’espace privé, mais à l’export je n’ai pas le champs idreponse dans le csv...
bref c’est un peu tiré par les cheveux, non ?
Je parle bien des réponses d’une personne pour un formulaire précis. J’ai raté mon copier coller je sais pas comment :
http://zone.spip.org/trac/spip-zone/browser/_plugins_/formidable/trunk/inc/formidable.php#L94
Répondre à ce message
Bonjour,
je vais sans doute prochainement jouer un peu avec ce plugin et notamment chercher à améliorer l’accessibilité par contre je n’arrive pas à trouver où est géré le squelette qui gère l’affichage des champs.
Par exemple je voudrais remplacer le hx généré comme titre du groupe de champ par un élément legend, idem pour les cases à cocher ou bouton radios je voudrais baliser l’ensemble dans un fieldset avec legend pour l’intitulé du groupe ou alors mettre un peu d’aria là dessus.
Ah génial, c’est une super nouvelle !
En ce qui concerne l’architecture, le cœur de Formidable est basé essentiellement sur le plugin Saisies. Tous les champs sont décrits en tant que saisies du plugin éponyme, puis enregistré dans un tableau standardisé, dans le champ « saisies » de la table des formulaires (spip_formulaires).
Le tableau correspondant à une liste de saisies est décrit suivant une norme définie par le plugin Saisies et documenté ici : Saisies#API. Avec pour chacune son type et ses options éventuelles.
Ensuite, pour faire très rapide, une fonction prend ce tableau en paramètre et génère chaque saisie une par une. Le squelette HTML de chaque saisie est dans le sous-dossier
/saisies/
du plugin Saisies. Le fichier particulier/saisies/_base.html
contient tout ce qui est commun et appelle ensuite le code particulier (sauf pour quelques saisies précises qui sont définies comme étant complètes, comme par exemple la saisie « fieldset »).Revenons à ton cas : modifier l’accessibilité pour Formidable, signifie donc modifier les squelettes de Saisies, ce qui signifie donc modifier tous les formulaires du monde qui utilise Saisies comme « framework » pour lister leurs champs. Ce n’est pas forcément un mal hein, mais c’est juste qu’il faut bien voir ce que ça implique. Et le fait que ça va potentiellement changer le code généré chez plein de monde, du coup (et donc casser des choses). Il va peut-être falloir prévoir une branche… (Saisies est pour l’instant uni-branche depuis le début, et multi-version de SPIP, mais là ça va peut-être devoir changer du coup.)
Hello Goetsu, as-tu des nouvelles de ces améliorations d’accessibilité ?
As-tu des trucs à partager ?
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 : |