plugin Forms : création de formulaires

Documentation basique du plugin Forms pour son volet création de formulaires.

Il y a d’autres usages et possibilités (sondages et code avec unserialize), qui seront détaillés dans d’autres articles.

Installation et activation du plugin

Comme pour tous les plugins (voir Les plugins), vous avez installé ce plugin par ftp puis vous l’avez activé dans l’interface de gestion des plugins (Configuration > Gestion des Plugins > cocher la case « Formulaires ») :

Initialisation du formulaire

  1. Passez la souris sur « Edition » puis cliquez sur l’icône « Formulaires et sondages » ;
  2. Cliquez sur « Créer un nouveau formulaire » ;
  3. Donnez un titre, éventuellement un descriptif, et indiquez une adresse email où seront envoyées les réponses au formulaire rempli en ligne par vos utilisateurs ;
  4. choisissez « Ce formulaire n’est pas un sondage » (c’est le seul exemple abordé dans ce document) puis validez ; La validation initialise la création du formulaire. Vous pourrez ensuite aborder la seconde phase, celle de la définition des champs du formulaire.
  5. la même page s’affiche donc apres la validation, mais en bas vous trouverez un sélecteur des types de champs que vous pourrez afficher dans votre formulaire.

Création des champs de saisie

Choisissez les champs dont vous avez besoin, nommez les, puis ajoutez chaque élément, un par un ; voici le détail des champs possibles :

    1. ligne de texte crée un champ de saisie sur une seule ligne
    2. texte crée un champ de saisie sur plusieurs lignes
    3. adresse mail crée un champ de saisie d’adresse mail avec la mention « Veuillez entrer une adresse e-mail valide (de type vous@fournisseur.com) »
    4. adresse web crée un champ de saisie d’adresse web avec la mention "Veuillez entrer une adresse Web valide (de type http://www.monsite.com/...)". D’autre part, on peut choisir de vérifier la validité du site.
    5. choix unique insère un choix entre autant d’item que l’on souhaite de style « bouton radio » un seul bouton pourra être coché.
    6. choix multiple insère les classiques choix à cocher avec possibilités de plusieurs choix (cases carrées). Pour ces deux derniers types de champs, le changement est proposé après la création du champ pour transformation d’un type vers l’autre.
    7. fichier à télécharger permet à l’utilisateur de joindre un fichier. Le concepteur du formulaire fixe la taille maxi en ko du fichier.
    8. mots-clés ajoute automatiquement une liste de cases à cocher de type « choix multiples » correspondants à tous les mots-clés d’un groupe de mots-clés. Le choix entre les groupes de mots-clés est proposé au concepteur du formulaire. ex : j’ai un groupe de mots-clés nommé « Thématiques ». En choisissant ce groupe lors de la création du formulaire, j’insère automatiquement une série de cases à cocher avec tous les mots-clés de ce groupe, soit Communauté, Culture, Développement, Licences libres, Logiciels libres.
    9. nouveau bloc de questions crée un nouveau cadre qui entourera tous les champs qui suivront jusqu’à l’insertion d’un autre champ « bloc de questions »
    10. message d’explication insère un texte de votre choix, donc par exemple pour écrire vos questions ou commenter votre formulaire.

Il est possible de modifier l’ordre des champs en cliquant sur les flèches « monter » ou « descendre » en vis à vis de chacun.
Un apercu du formulaire est visible dans le cartouche, en cliquant sue le petit triangle devant APPARENCE DU FORMULAIRE

Lorsque vous avez intégré tous les composants souhaités , cliquez sur « Retour » en haut de la page. Votre formulaire est créé. Pour le publier il faut maintenant l’inclure dans un article

Vous insérez donc ce formulaire dans un article, à la manière d’une insertion d’image : lorsque vous créez ou modifiez un article, vos formulaires se trouvent à gauche de votre article et vous n’avez qu’à coller le code du formulaire voulu dans le corps de votre article (comme pour une image <img1>)
Ex : Dans ce site, <form1> inséré dans un article donnera le formulaire comme ceci : <form1>

Afficher un formulaire dans un squelette

Vous pouvez également afficher un formulaire directement dans les squelettes en utilisant la notation suivante :

[(#MODELE{form}{id_form=1})]

Afficher un sondage dans un squelette

Pour afficher un sondage, il faudra procéder en deux étapes et utiliser un <INCLURE> pour bien gérer le cache.

1) Créer un squelette par exemple sondage.html

#CACHE{0}
[(#MODELE{form}{id_form=1})]

2) Inclure ce squelette ou vous voulez (disons sur la page d’accueil)

<INCLURE{fond=sondage}>

Vous pouvez consulter les réponses que vos utilisateurs ont envoyées :

  • En consultant l’interface privé : en passant votre souris sur « Forum », puis sur « Suivi des réponses » (les réponses sont sur le même mode que les signatures des pétitions).
  • En recevant les réponses par email : Si vous avez indiqué une adresse mail dans la configuration de votre formulaire (plus haut), vous recevrez également le contenu du formulaire par mail (pour autant que votre serveur vous autorise à envoyer des mails).
  • En Exportant les réponses au format CSV : Vous avez également la possibilité de télécharger le fichier des données collectées au format csv pour excel. Sur la page Edition > Formulaire et sondage > Votre Formulaire : une fois que votre formulaire est publié et que vous avez collecté des réponses, apparait à gauche de l’interface de modification du formulaire, un bloc de consultation des réponses
    • > voir les réponses (consultation modération cf forum) -> télécharger les réponses (récupération de l’ensemble des données sous forme d’un fichier csv pour excel)

Récupérer les informations du formulaire dans une boucle

Vous pouvez récupérer les infos générales de vos formulaires en utilisant la boucle suivante :

<BOUCLE_formulaire(FORMS)>
#TITRE
</BOUCLE_formulaire>
  • Soit « FORMS » = le nom de la table
  • #TITRE = le titre du formulaire

Un exemple complet de l’utilisation des boucles de formulaires est visible dans le plugin, dans le squelette de génération du formulaire (formulaires/forms.html)

Les balises disponibles sont #DESCRIPTIF, #SONDAGE (attention ne sera plus supporté dans forms2), #EMAIL (données serialisées, non utilisable simplement), #CHAMPCONFIRM (nom du champ email dont la valeur est utilisee pour envoyer un mail de confirmation), et #TEXTE (texte pour l’envoi du mail de confirmation)

Pour accéder aux informations concernant les champs des formulaires, 2 autres boucles sont utilisées :

La boucle FORMS_CHAMPS permet d’acceder aux infos d’un champ :

<BOUCLE_champs(FORMS_CHAMPS){id_form}{par cle}>
[(#TYPE|=={ligne}|?{' ',''})
	<input type='text' name='#CHAMP' id='#CHAMP' value="" 
		class='[(#OBLIGATOIRE|=={oui}|?{forml,formo})]' size='40' />
]
</BOUCLE_champs>

Cet exemple simplifie issu de formulaires/forms_structure.html affiche l’input des champs de type ligne d’un formulaire

La boucle FORMS_CHAMPS_CHOIX permet d’acceder aux choix possibles pour un champ etendu de type choix multiple ou unique. Voici un autre exemple simplifié, issu de formulaires/forms_champs_multiple.html

<BOUCLE_f(FORMS){id_form}>
<BOUCLE_champs(FORMS_CHAMPS){id_form}{cle}> 
	<BOUCLE_choix(FORMS_CHAMPS_CHOIX){id_form}{cle}{par num titre,titre}>
	<span class='spip_form_choix_multiple'>
	&nbsp; <input type='checkbox' name='#CHAMP[]' id='#CHOIX' value='#CHOIX' />
	<label for='#CHOIX'>[(#TITRE|supprimer_numero)]</label>
	</span>
	</BOUCLE_choix>
</BOUCLE_champs>
</BOUCLE_f>

Récupération des données des formulaires créés via des boucles

Les réponses au formulaire sont elles stockées dans la table spip_reponses et spip_reponses_champs. Pour une réponse donnée, vous avez un enregistrement dans spip_reponses, associé a n enregistrements de spip_reponses_champs ayant le meme id_reponse. Donc vous pouvez éventuellement récupérer les réponses par des boucles sur ces tables. Toutefois, les données des champs de type choix ne sont pas stockées en clair mais en tant que numero de choix (à peu de choses près), et il faut utiliser les boucles decrites ci-dessus pour les interpreter.
Un exemple de squelette affichant une réponse en clair est fourni avec le plugin (forms_reponse.html, a la racine du plugin).
Ces boucles sont d’un niveau d’utilisation avancées du fait de leurs interdependances.

Exemple : afficher les données lors du retour de validation d’un formulaire
Dans cet exemple on cherche à afficher les données d’un formulaire dans une page article lorsque l’utilisateur vient de valider un formulaire intégré dans un article avec le modèle <formXX>.
Pour cela on modifie le squelette article.html en ajoutant à l’endroit où doivent apparaître les résultats (par ex. juste après la balise #TEXTE l’un des deux exemples suivant :

  • Premier exemple : afficher les données qui viennent d’êtres saisies par l’utilisateur :
    <BOUCLE_feinte(ARTICLES){0,1}>[(#ENV{ajout_reponse}|?{' ',''})]</BOUCLE_feinte>
    <br><strong>Affiche les donn&eacute;es qui viennent d'&egrave;tres remplies:</strong><br>
        <BOUCLE_reponses(FORMS_DONNEES){id_donnee}>
            <BOUCLE_champs(FORMS_CHAMPS){id_form}{par rang}>
            #TITRE : <span class='#_reponses:EDIT{#CHAMP}'>#LESVALEURS{','}</span>
            </BOUCLE_champs>
        </BOUCLE_reponses>
    </B_feinte>
  • Deuxième exemple : afficher l’ensemble des données saisies pour ce formulaire :
    <BOUCLE_feinte(ARTICLES){0,1}>[(#ENV{ajout_reponse}|?{' ',''})]</BOUCLE_feinte>
    <br><strong>Affiche l'ensemble des donn&eacute;es saisies:</strong><br>
        <BOUCLE_reponses2(FORMS_DONNEES){par id_donnee}>
            R&eacute;ponse #ID_DONNEE:<br>
            <BOUCLE_champs2(FORMS_CHAMPS){id_form=#ENV{ajout_reponse}}{par rang}>
            #TITRE : <span class='#_reponses:EDIT{#CHAMP}'>#LESVALEURS{','}</span><br>
            </BOUCLE_champs2>
            <br>
        </BOUCLE_reponses2>
    </B_feinte>

    Note : dans les 2 cas on utilise une BOUCLE_feinte qui permet de tester la présence du critère d’environnement ajout_reponse pour n’afficher les résultats que si la page est chargée en retour d’une validation du formulaire. Pour plus d’infos sur les boucles feintes, voir le paragraphe « Parties optionnelles des balises » dans cet article : http://www.weblog.eliaz.fr/article6...

Utiliser la fonctionnalité de liaison (dépendance) entre plusieurs formulaires

Il est possible de rendre un formulaire dépendant du remplissage d’un autre formulaire : c’est le rôle du champ « Formulaires obligatoires pour la saisie de celui-ci » de l’onglet Propriété d’un formulaire.
Cette fonctionnalité permet typiquement de faire quelque chose du style :

  • l’utilisateur arrive sur un article qui présente un premier formulaire (<form1> pour cet exemple) : il le rempli et le valide.
  • une fois cette validation faite, l’article se ré-affiche avec un deuxième formulaire (<form2> par ex.) qu’il peut alors remplir (le premier formulaire n’est plus visible).
  • une fois celui-ci validé, un troisième formulaire s’affiche (<form3>).

Mode opératoire :

  • créer les 3 formulaires
  • dans le champ Formulaires obligatoires pour la saisie de celui-ci de <form2>, on indique 1 (le numéro du formulaire de l’étape 1).
  • dans le champ Formulaires obligatoires pour la saisie de celui-ci de <form3>, on indique 1,2 (le numéro du formulaire de l’étape 1 et de celui de l’étape 2, séparés par une virgule).
  • Créer l’article qui contiendra l’enchaînement de ces 3 formulaires (un seul article), et mettre dans le texte de celui-ci <form3> uniquement !
    L’idée c’est que pour que <form3> s’affiche, il sera nécessaire d’avoir rempli <form1> puis <form2>, qui seront automatiquement insérés à la place de <form3> l’un après l’autre. Il ne faut donc pas faire d’appel direct au modèles <form1> et <form2>.

Remarques

  • si vous voulez que vos tests fonctionnent, il est nécessaire de vider les données saisies liées à votre compte utilisateur pour les 2 premiers formulaires et de supprimer les cookies spipcookie_form_1 et spipcookie_form_2 avant chaque essai (installez firecookie en plus de Firebug dans votre FireFox afin de simplifier cette opération).
  • apparament il doit y avoir un léger problème dans la prise en compte de l’étape qui vient d’être validée puisqu’en réalité, lorsque l’article est réaffiché à la validation d’un formulaire, il est nécessaire de recharger la page pour que le formulaire suivant apparaisse (recalcul pas nécessaire, simplement rechargement de la page)... Et cela même avec un #CACHE{0} dans le squelette de l’article qui contient les formulaires.
    Si vous avez des infos pour contourner ce problème, merci de laisser un message dans le forum attaché à cet article !

La version pour spip 1.9.1 est disponible en telechargement sur la zone.

Spip 1.9.2

La nouvelle version du plugin s’appelle forms&tables. Elle est compatible 1.9.1 & 1.9.2, et est en téléchargement ici

Spip 2.0

Une nouvelle version du plugin pour SPIP 2.0 est désormais disponible : Forms&Tables 2.0

Discussion

332 discussions

  • 8

    Bonjour,
    j’ai un souci lors de la creation du formulaire dans l’espace privé, le choix des champs à saisir ne s’affiche pas.
    Je m’explique : la premiere page de creation du formulaire s’affiche bien, mais à la validation j’arrive sur une page avec apercu / proprietes / champs et c’est tout et le clic sur champs ne declenche rien.
    le clic sur propriété me ramene à la page precedente et il faut recreer le formulaire qui n’a pas été enregistré lors de la 1re création.

    Je suis en SPIP 1.92 , forms table 1.91 , squelette alternative , aucun autre plugin (j’avais le couteau suisse, mais je l’ai désactivé pour etre sur qu’il n’y ait pas d’incompatibilité)

    Adresse publique du site : http://stadebordelais-bmx.com/

    SI vous avez des idées, merci

    Bruno

    • Pépée carvalho

      Bonjour,

      J’ai eu le même problème pour un site. En plus j’avais les statistiques qui ne bougeaient pas et la moitié de mes plugins avaient un fonctionnement bizarre.

      Il s’agissait de changer l’option ’safemode’ au niveau du serveur. Je ne peux pas rentrer dans les détails car c’est l’hébergeur qui a trouvé cette solution quand je lui ai expliqué le problème constaté par rapport au fonctionnement attendu (mon site marchait très bien en local, le pb est apparu lorsque je l’ai déplacé).

      En espérant que cela va être utile...

    • Patrick

      Bonjour,

      J’en suis au même point que l’auteur du message du 14 février à 09:51 , je viens de réinstaller le plugin en local, et je me suis aperçu que les tables n’étaient pas créées dans la base : le plugin fonctionne à vide.
      J’ai ce problème en local (easyphp) et en distant.
      Je m’en suis sorti en local en copiant les tables d’un autre site, et cela marche, mais ce qui m’intéresserais c’est que tout se déclenche « normalement ».

      Donc même situation : comment déclencher la création des tables puisqu’à l’installation du plugin et sa configuration par cfg, cela ne se fait pas (ou plus dans mon cas) ?

      J’ai peut être sauté une étape, ou easyphp est mal configuré ou mon serveur distant qui a eu la même réaction n’accepte pas ????????

    • J’ai le même souci. En local je créée mon formulaire avec ses champs sans problème. Dans le site définitif, dans l’espace privé, aprés la création du formulaire impossible de rajjouter des champs voir de supprimer le formulaire. J’ai demander à l’administrateur dur serveur de basculer le safemode mais cela n’a rien changer. Quelqu’un a t’il une solution ou une piste ? Pour info (SPIP 1.9.2 forms_et_tables_1_9_1 Version : 0.304 (phpMyAdmin - 2.11.9.4 , MySQL : 4.1.22))

    • Patrick

      Bonjour,
      J’ai constaté qu’une version de spip 192d créait les tables, mais pas la version 192e...

      Ce que j’ai fait, j’ai transporté directement les tables sur la base de données.

      Vérifiez si les tables existent bien sur la base, celà vient peut être de là.

      Je ne suis pas chez moi, sinon j’aurais pu vous dire quelles tables importer.

      PS : j’ai créé les tables avec easyphp 1.8

      Il est possible que le problème ne soit apparu qu’a ceux qui ont installé un spip sur de nouvelles bases, parceque je ne m’en étais pas apperçu sur une mise à jour, les tables étant déjà créées.
      Bonne chance

    • Merci Patrick. Je suis en 1.9.2.d en local comme dans la version public. Les tables SPIP.forms spip.forms_champ ,... sont bien créés avec les bons enregistrement, mais les champs , données, etc sont vides. Seuls spip.forms n’est pas vide ( ce qui est normal car j’ai pu commencer à créér mon formulaire mais pas créer les champs qui sont dans les formulaires.

    • Patrick

      Bonsoir,
      Est ce que cela marche en local avec le même spip (192 d si j’ai bien compris) ?

    • Bonjour
      Oui ça marche parfaitement en local avec la même version de SPIP 1.9.2.d

    • Patrick

      Bonsoir, désolé, mais j’ai épuisé tout ce que je pouvais vous proposer comme aide, j’espère que vous trouverez assez vite, bonne chance.

    Répondre à ce message

  • Sports Center

    .

    Bonjour,

    Je suis nouveau sur SPIP et je ne connais pas grand chose en php.

    Afin d’avoir l’expéditeur et le sujet du mail dans mon client mail, j’aimerais savoir si quelqu’un a la solution pour récupérer les variables des champs « adresse e-mail » et « sujet » pour les intégrer dans l’entête du mail (voir le formulaire à cette adresse : Sports Center.
    Avec un filtre sur la page à partir de laquelle le mail a été envoyé, je pourrai classer automatiquement les mails envoyés via le formulaire.
    Une fois classés, les mails seraient affichés avec l’adresse mail du visiteur (colonne « expéditeur ») et le sujet du mail (colonne sujet) sans avoir à utiliser la fonction recherche de mon client mail.

    Ma deuxième question est tout aussi banale quand on sait coder : comment, dans un champ, mettre une valeur par défaut ou (et) comment mettre un champ non modifiable ? (voir le formulaire à cette adresse : Sports Center. Je voudrais, dans ce cas, que le champ « sujet » comporte déjà une valeur (jeu concours) et (ou) que cette valeur ne soit pas modifiable.

    Merci à toutes les personnes qui pourront m’aider, et surtout, Merci aux développeurs de cette contribution très utile et vraiment très simple à installer et à utiliser.

    .

    Répondre à ce message

  • Ploufplouf

    Bonjour,

    J’utilise le plugin forms&tables dans la plupart de me sites et je me suis aperçu d’un petit souci de taille de caractère pour le bloc de texte. J’ai bien essayé de corrigé ça dans la css mais impossible de trouver d’où cela provient. La ligne e texte fonctionne bien au niveau de la taille, de la couleur de fond ou encore des traits et couleur de remplissage. Mais la taille de caractère est diminué dans un bloc de texte et la couleur en remplissage ne changent pas.
    Si quelqu’un a une idée de comment résoudre le problème ou encore un tuto pour bien comprendre la css, je vous en remercie.
    J’apprends petit à petit à manier ce plugin qui offre de grandes posibilités et suis impatient de voir la version pour Spip 2.

    Répondre à ce message

  • Bonjour à tous

    Une petite question : est-il possible d’envoyer le mot de passe non crypté dans le mail de confirmation destiné à l’utilisateur ?

    Merci par avance

    Répondre à ce message

  • Merci pour ce plugin génial !

    J’ai cependant une question : est-il possible de récupérer un champ du formulaire dans le mail de confirmation expédié à la personne qui l’a rempli (par exemple, renvoi du login et du mot de passe à l’utilisateur) ?

    Répondre à ce message

  • Bonjour,

    Je me suis aperçu d’un petit dysfonctionnement dans le plugin formulaires et sondages : imaginez que vous fassiez un sondage avec 4 questions A,C,D et B.

    Après avoir créé les 4 champs dans l’ordre précédent, vous vous avisez que finalement, les questions seraient bien plus logiquement ordonnancées dans l’ordre A B C D et vous les déplacez en conséquence grâce à la fonctionnalité idoine du plugin.

    Làs, les réponses au sondages affichées dans les articles grâce à la balise

    continuent de s’afficher dans l’ordre A C D B. Pire encore, les questions ne sont pas rappelées dans les réponses de sorte que la confusion est vite totale.

    L’idéal serait de rappeler les questions et de remettre les réponses dans l’ordre A B C D. Je ne l’ai pas fait totalement mais j’ai fait au moins la première étape : rappeler les questions dans les réponses.

    J’ai ajouté la ligne :

    $r.="<strong>".$row2['titre']."</strong>\n";

    entre les lignes

    $r .= "<br />\n";

    et

    $r .= "<div class='sondage_table'>";

    dans l’affichage des résultats de sondages fournis par le fichier forms_fonctions.php

    ça marche

    Répondre à ce message

  • marabbeh

    Bonjour,

    Serait-il possible d’avoir divers formats de séparateurs pour les dates : 09.03.2009 (très utilisé par les germanophones), 09-03-2009 ou 09032009 ?

    Merci

    Répondre à ce message

  • Fatal error : Call to undefined function debut_page() in Z :\home\localhost\www\test\plugins\forms\inc\forms_tables_affichage.php on line 147

    When I trying to click on the « Tables » in « Site Edit » menu

    With 1.9.2 works good

    PS
    Sorry, dont speak French

    Répondre à ce message

  • Pépée Carvalho

    Bonjour,

    Concernant le lien entre la fonctionnalité sondage et la gestion des profils, j’ai un souci. J’ai un site du type extranet où seul les membres peuvent consulter certains contenus. Je bloque l’accès en utilisant #LOGIN_PUBLIC et les gens habilités à voir le contenu sont des visiteurs (ils n’ont pas accès au back office).

    Dans la rubrique bloquée, j’ai mis un sondage mais je m’aperçois que le le vote des visiteurs n’est pas pris en compte. seul celui des administrateur l’est. De plus quand un visiteur arrive sur le site, cela dit qu’il a déjà répondu au sondage.

    Je ne sais pas quoi faire. avez-vous une idée. Je voudrais que les visiteurs puissent voter nommément.

    Répondre à ce message

  • Bonjour
    J’aimerai pouvoir créer un formulaire multiple mais dont la réponse à un choix unique (A ou B), dans [form1], ferait apparaitre un formulaire [form2] en cas de choix A ou un formulaire [form3] en cas de choix B.
    Est-ce possible ?

    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 :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom