Formulaire de contact avancé

Un formulaire de contact configurable, avec de multiples options.

ATTENTION : bien que fonctionnant, ce plugin n’est plus maintenu depuis plusieurs années. Cela fait au moins 10 ans qu’il est conseillé de le remplacer par le plugin Formidable plus souple et maintenu activement.

Préambule

SPIP propose nativement #FORMULAIRE_ECRIRE_AUTEUR qui permet d’écrire à un auteur précis. On peut donc l’utiliser pour la page de contact du site, en mettant le webmestre en auteur. Cette approche peut paraître limitée. Imaginons donc un formulaire entièrement configurable.

Ce formulaire remplace — et donc supprime — le plugin « Formulaire de contact configurable » avec lequel il a fusionné. Les utilisateurs migrants de l’un à l’autre devront donc reconfigurer le formulaire. Par ailleurs, et depuis la rédaction de cet article le plugin évolue, nous vous conseillons de lire également « Le formulaire de contact évolue ».

Installation

Comme pour les autres plugins, vous devez télécharger le paquet ci-joint et placer son contenu dans votre dossier plugins/.

Vous devez utiliser PHP 5 pour faire marcher le plugin Voyez avec votre hébergeur si ce n’est pas le cas par défaut. Surtout que PHP 4 n’est plus maintenu.

Ensuite il faut aller dans l’interface de gestion des plugins, l’activer et enfin cliquer sur l’icône d’outils pour le configurer. Au préalable vous devrez installer les plugins cfg, spip-bonux, et Jquery UI.

Alternativement, vous trouverez aussi ce plugin dans la liste d’installation automatique fournie par spip-contrib (il faut pour cela avoir un dossier plugins/auto).

Utilisation

Pour afficher ce formulaire dans un squelette :

Appel classique :

#FORMULAIRE_CONTACT

Appel avec l’auteur 34 pré-selectionné :

#FORMULAIRE_CONTACT{34}

Appel AJAX (sans rechargement de la page) :

<div class="ajax">
    #FORMULAIRE_CONTACT
</div>

Pour afficher ce formulaire dans un contenu :

Appel classique :

<formulaire|contact>

Appel avec l’auteur 34 pré-selectionné :

<formulaire|contact|auteur=34>

Appel AJAX (sans rechargement de la page) :

<div class="ajax">
    <formulaire|contact>
</div>

Configuration

Il y a trois principales choses à configurer :

  • La liste des auteurs à qui le courrier pourra être envoyé
  • La méthode de choix pour le visiteur
  • Les éventuelles informations supplémentaires

On peut choisir l’ordre des informations supplémentaires par simple glisser-déplacer à la souris. L’ordre sera gardé en mémoire et repris alors sur le site public.

Personnaliser l’affichage des champs d’informations

Par défaut, le plugin affiche un champ texte basique pour chaque information supplémentaire demandée. Mais parfois, on veut personnaliser ces champs, par exemple pour restreindre des valeurs. Et bien c’est prévu !

Pour cela, il faut connaître l’identifiant du champ que l’on veut personnaliser. Il suffit de regarder dans le HTML l’attribut name du champ. Sinon la liste complète des champs par défaut se trouve dans le fichier contact_options.php.

Vous n’avez alors plus qu’à créer un fichier : /formulaires/contact_champ_*nomduchamp*.html, dans votre dossier squelettes ou dans votre plugin.

Par exemple, si vous voulez mettre une liste déroulante pour restreindre les pays, il faut créer un fichier /formulaires/contact_champ_pays.html, dans lequel vous pourrez mettre par exemple :

<li class="saisie_#ENV{name}[ (#ENV{name}|in_array{#ENV{obligatoires,#ARRAY}}|oui)obligatoire][ (#ENV*{erreurs}|table_valeur{#ENV{name}}|oui)erreur]">
	<label for="info_#ENV{name}">
		#ENV{titre}[ (#ENV{name}|in_array{#ENV{obligatoires,#ARRAY}}|oui)<strong><:info_obligatoire_02:></strong>]
	</label>
	[<span class="erreur_message">
		(#ENV*{erreurs}|table_valeur{#ENV{name}})
	</span>]
	<select name="#ENV{name}" id="info_#ENV{name}">
		<option 
			value="England"[ 
			(#ENV{#ENV{name}}|=={England}|oui)selected="selected"]>
			England
		</option>
		<option
			value="France"[ 
			(#ENV{#ENV{name}}|=={France}|oui)selected="selected"]>
			France
		</option>
	</select>
</li>

Dans le fichier, #ENV{name} correspondra à l’identifiant du champ, et #ENV{titre} à son titre dans la langue courante. #ENV{#ENV{name}} correspond donc à la valeur déjà tapée du champ en question.

Ajouter de nouveaux champs

Le plugin prévoit un point d’entrée qui permet, lorsqu’on s’y connecte, d’ajouter autant d’entrées que l’on veut.

Il faut tout d’abord s’inscrire dans le point d’entrée.

Soit dans un plugin

<pipeline>
    <nom>contact_infos_supplementaires</nom>
    <inclure>un_fichier.php</inclure>
</pipeline>

Soit dans le mes_options.php de votre site

$GLOBALS['spip_pipeline']['contact_infos_supplementaires'] .= '|montruc_contact_infos_supplementaires';

Ensuite dans la fonction qui s’est insérée dans le point d’entrée :

function montruc_contact_infos_supplementaires($champs){
    // Le paramètre contient tous les champs par défaut avec :
    // clé = le "name" du champ
    // valeur = le titre du champ
    $champs['nouveau_truc'] = 'Un titre';
    
    // Si votre site est multilingue, il faut utiliser une chaine de langue
    $champs['civilite'] = _T('une_chaine_de_langue_pour_civilite');
    
    return $champs;
}

Et c’est tout.
Par défaut le champ sera une entrée de texte simple, et vous pouvez le personnaliser comme décrit dans le point précédent.

Discussion

463 discussions

  • fulvio

    merci !
    cest possible davoir un formulaire avec champ supplémentaire et un autre sans ?

    Répondre à ce message

  • 1

    cases à cocher, boutons radio, choix sur menus déroulants

    C’est déjà possible, il suffit de créer des squelettes personnalisés pour chaque champ dans formulaires/contact_champ_*nomduchamp*.html et de mettre ce qu’on veut dedans. C’est juste que ce n’est pas encore documenté. :)

    Bonjour,

    Super ce plugin !!
    Mais j’ai beau chercher... Je ne trouve pas comment personnaliser le formulaire en rajoutant des champs à ceux existants (champs texte supplémentaire, bouton radio ou cases à cocher). J’ai bien tenté de suivre la piste ci-dessus en créant un fichier html comme indiqué, avec un nouveau champs de formulaire à l’intérieur : Mais sans succès ! :-((
    Si quelqu’un avait une explication un petit poil plus précise, je serai ravi... ;)

    Merci

    • Mais j’ai beau chercher... Je ne trouve pas comment personnaliser le formulaire en rajoutant des champs à ceux existants

      Ça y est, j’ai écrit la doc. Voir plus haut.

      Attention : il faut attendre ce soir après 19h et mettre à jour le plugin (ou immédiatement si c’est par SVN), car il manquait une petite chose pour que ça marche exactement comme dans la doc.

    Répondre à ce message

  • 1

    Merci pour la réponse ! Je suis bien d’accord que les pièces jointes et l’enregistrement dans la base seraient utiles.
    Tant que j’y suis, je vous suggère d’autres fonctionnalités :
    -  cases à cocher, boutons radio, choix sur menus déroulants…
    -  formulaire permettant à des visiteurs de s’inscrire en faisant des choix et en voyant les choix des autres…

    Merci pour votre travail !

    • cases à cocher, boutons radio, choix sur menus déroulants

      C’est déjà possible, il suffit de créer des squelettes personnalisés pour chaque champ dans formulaires/contact_champ_*nomduchamp*.html et de mettre ce qu’on veut dedans. C’est juste que ce n’est pas encore documenté. :)

      formulaire permettant à des visiteurs de s’inscrire en faisant des choix et en voyant les choix des autres

      Là ça va un peu loin pour un formulaire de contact. Faut pas tout mélanger : un plugin, une fonctionnalité. :) Pour l’inscription d’auteur/visiteur avec des champs personnalisés, c’est le plugin Inscription2.

    Répondre à ce message

  • 1

    Bonjour,

    Peut-on avoir plusieurs formulaires de contact simultanément (et bien sûr, configurés différemment) ?

    Merci

    • Non, ce n’est pas possible pour l’instant. Mais c’est une fonctionnalité intéressante sur laquelle réfléchir. Mais ça ne serait pas pour tout de suite, la priorité étant l’envoi de pièces jointes et la possibilité d’enregistrer les messages dans la base.

    Répondre à ce message

  • 1
    fulvio

    Alors le problème vient à cause de ces 3 options que j’ai activées dans le couteau suisse :
    -  glossaire interne,
    -  un sommaire automatique,
    -  découpe en pages et onglets
    Et c’est trop dommage car étant un site avec plein de textes en ai impérativement besoin :(

    Répondre à ce message

  • 1

    Alors j’ai désactivé tous les plugins sauf celui ci et bonux et ça fonctionne en effet.Tous mes plugins ont été récupérés en « auto » sur ma 2.0.7 fraîchement installée.
    Alors j’ai remis les plugins et ai trouvé celui qui me crère l’erreur : le couteau suisse ! Là n’ai pas le temps de voir si en désactivant les options « activées » si la situation change mais je le ferais dès que j’ai un moment.
    En tout cas cest lui qui crèe cette erreur. J’ai tout le temps vidé le cache et fais le test.
    Dans le couteau voici les choses que jai activées en ce moment « spip et le cache, site en travaux, glossaire interne, un sommaire automatique, blocs dépliables, découpe en pages et onglets ». Faudra donc que je regarde si cest un de ceux ci qui crèe le conflit :(

    POur les autres infos merci. Si j’utilise le système et le traduit (italien probablement) je fournirais le fichier de langue ;)

    • Haha, les mystères mystérieusement mystérieux du couteau suisse... Je le dis tout de suite : je ne passerai pas de temps à fouiller ce gros plugin. :)

      Pour l’italien, ça serait super, merci ! (Il va bientôt y avoir quelques chaines en plus si on finit d’ajouter les pièces jointes).

    Répondre à ce message

  • 1

    Alors je l’ai installé sur un spip 2.0.7 et jobtiens cette erreur

    <?php $lang_select = lang_select("fr"); include_once(_DIR_RACINE . "ecrire/balise/formulaire_.php"); inclure_balise_dynamique(balise_FORMULAIRE__dyn('FORMULAIRE_CONTACT'),1, 0); if ($lang_select) lang_select(); ?>

    Mes questions :
    -  je l’appelle dans la partie rédaction avec ce code

    <formulaire|contact>

    cest juste ?
    -  je dois ajouter des champs (email par ex !!) si jai bien compris doit créer un fichier contact_email.html ?? avec quoi dedans ?
    -  si j’ai besoin de 2 formulaires différents sur le site (avec des champs différents) est ce possible ? si oui comment ?
    -  enfin, et ca peut être lié à la question précédente, pour le multilinguisme ca se passe comment ?

    Merci infiniment !

      • Je ne comprends pas l’erreur que vous avez. Vous voulez dire que vous avez le code PHP dans la page finale ? Peut-être est-ce le cas mais il y a peu de chance que ce soit dû au plugin Contact. Il faut essayer de désactiver d’autres plugins pour voir s’il n’y a pas des incompatibilités et fouiller le squelette aussi. Est-ce qu’il y a une URL publique pour voir le problème ?
      • Le champ email y est déjà. Et il est forcément obligatoire. Ce n’est donc pas un champ d’information supplémentaire.
      • Pour ajouter des champs il faut s’inscrire dans le point d’entrée « contact_infos_supplementaires » et ajouter une entrée au tableau : $champs['nouveau_truc'] = 'Le titre du champ';
      • Pour les traductions, il est pour l’instant en français et anglais normalement. Il suffit de créer d’autres fichiers de langue dans le répertoire lang/ en suivant la même forme. Si vous le traduisez dans d’autres langues, faites-en profiter tout le monde !

    Répondre à ce message

  • 1

    Salut,

    J’ai installer ce plugin, et je voulais savoir s’il était possible d’y associer notre propre graphisme avec un style css.

    Pour cela, comment faire ?

    Merci d’avance.

    • Bonjour,
      je ne vois pas trop ce que ce formulaire précisément a de particulier par rapport au reste du contenu de vos pages.

      Vous faîtes du CSS comme pour le reste, ni plus ni moins. Le HTML reprend la structure et les classes des autres formulaires de SPIP, donc on peut styler tous les formulaires d’un coup. SPIP le fait déjà d’ailleurs dans spip_formulaires.css. Il suffit de s’en inspirer et d’harmoniser tout ça avec votre graphisme.

    Répondre à ce message

  • 5
    Daniela

    bonjour,

    votre pugin c’est bien mais je trouve qu’il est juste une routine pour envoyer aux auteurs du site ?!

    perso je pensais que pour le champs destinataires nous pourrions introduire des emails directement voir des noms et des emails ?

    pour pouvoir envoyer un message à un email spécifique (destinataire) je dois le créer comme utilisateur dans spip (c’est un peu lourd je trouve ! surtout quand je ne veux pas avoir d’utilisateur fantome). L’idéal serait de pouvoir choisir entre des destinataires inscrits dans spip ou introduire des destinataires autres.

    exemple : je veux avoir comme destinataire : daniela.office@monassociation.org, sachant que ce mail n’est pas inscrit comme utilisateur dans spip, et que je ne veux pas lui créer un compte rien que pour l’utiliser (oui, même pas comme visiteur !), ne serait as plus simple d’introduire son email directement ??

    je ne sais pas comment faire, vue que je suis nulle en programmation, mais j’ai compris que cela est loin de satisfaire mon besoin.

    merci et bonne continuation.

    • bonjour Daniela,

      je ne suis pas auteur de ce plugin, certes ta remarque es pertinente, d’ailleurs, pour certains ça serait vraiment plus simple peut être ? je ne le sais pas !

      mais je et conseilles d’activier l’inscription de visiteurs, de créer un auteur au statut visiteur (celui-ci n’a aucun accès au back-office), et de lui attribuer le nom qui te conviens et l’email que tu veux utiliser, repartir dans cfg du formulaire de contact et là, choisir cet utilisateur, tu verras c’est assez simple !

      tu pourras créer autant de visiteurs que tu as besoins de destinataires !

      mmm, cependant introduire des emails directs serait plus avantageux que de choisir dans un listing de plusieurs centaines d’utilisateurs (pour les gros sites !)

      ce qui serait pas mal ausi c’est de pouvoir ajouter des champs (pas au même niveau que le faisait Forms & Tables) mais juste pour le formulaire de contact, genre ajouter champs « emploi », « age »,...

      @+

    • Ce n’est pas prévu dans le plugin, en tout cas pas à court terme. En effet un destinataire c’est quoi ? : une adresse mail et un nom. C’est-à-dire exactement ce que fournit l’objet « auteur » de SPIP. On ne va donc pas créer un objet différent en plus alors que tout ce qu’il faut est déjà en place.

      Surtout qu’une des fonctionnalités en train d’être développée, c’est de pouvoir dire : « je veux garder en mémoire les courriers de contact dans mon SPIP ». Pour cela, le plugin va utiliser tout simplement l’objet « message » fourni de base dans SPIP, et qui est lié à ... un auteur évidemment. Si l’on autorisait le choix d’un auteur ET de saisies arbitraires, il y a alors certains cas où l’on pourrait enregistrer dans SPIP les messages, et d’autres pas. Ça introduit une complexité en plus inutilement à mon avis. En tout cas pour l’instant.

      En attendant, il est simple de créer des faux auteurs qui n’accèderont de toute façon jamais à l’interface. Là comme ça, je ne vois pas de cas qui empêcherait cette utilisation. Même si ça peut exister puisque tout existe (et c’est apparemment votre cas) c’est un cas qui doit être assez rare, à mon avis.

      Pour l’instant la priorité c’est de pouvoir envoyer des pièces jointes, puis de pouvoir enregistrer les messages (et leurs PJ éventuelles) dans la base de SPIP.

      Désolé de ne pas pouvoir vous aider pour le moment.

    • je suis tout à fait d’accord avec toi...rien de plus simple que d’utiliser des faux auteurs (des inscrits avec le statut visiteur) comme je l’ai recommandé à Daniela, qui en a plutot besoin.

      il est vrai que pour les prochains développements :

      -  piece jointe ça serait très bien ! (comment aller vous procéder ?? je peux aider si vous le voulais !)
      -  pour l’enregistrement des messages ça serait bien mais rapidement envahissant dans le cas où l’on reçoit des centaines de messages par jour (imaginez avec pieces jointes en plus !), à mon avis si c’est le cas faudrait aussi penser à implémenter : une fonction d’export des messages au format eml ou texte ou cvs, et aussi de purger les messages, pour alléger la base de données.

      ça reste mon avis personnel mais « je veux garder en mémoire les courriers de contact dans mon SPIP » devrait être mis au conditionnel, ça serait bien que ça soit une option et non quelque chose d’automatiquement fait par le plugin, si j’en veux pas je fais comment ??

      @+

    • Euuuh : tu as dis toi-même dans le message précédent qu’il y avait une page de configuration du plugin. Et en plus ma phrase est claire : « c’est de pouvoir dire que... ». C’est une possibilité offerte à l’utilisateur. À aucun moment je n’ai donc dit que c’était activé par défaut.

    • ben faut pas te facher, mais c’étais pas aussi explicite !
      maintenant que tu l’as précisé en effet c’est très calir !

      merci et bonne continuation.

      PS : sinon j’aimerai participer avec vous au développement et aux traductions, mais comment faire tout en étant un plus et pas un frein à l’avancée du plugin avancé ! lol

    Répondre à ce message

  • 9

    Bonjour

    Je souhaiterais savoir si vous envisager de la faire valide dans l’édition de formulaire, car je souhaite monter valide W3C mais votre formulaire me gène

    • Je ne comprends pas votre phrase.

    • Je souhaite faire un site normaliser W3C mais la page de contact :
      http://test.beau-lieu-bec.org/spip.php?page=formulaire_contact
      Ne peux pas être au norme pour cette page

    • Il y a beaucoup d’erreurs html triviales. Tidy en repère 72 ....

      exemple une balise de paragraphe écrite <p /> je ne crois pas que ça existe encore :)

    • Quant entendez vous par la ? Je voit surtout des erreur

        et . Est ce que c de chez moi ou bien du plugins ?
      • Il faudrait virer dans votre script le p et le span pour y voir plus clair :

        	
        <div id="content">
        <div class="sidebox">
        <p />
        <span class="formulaire_contact">
        <div class="ajax">
      • Pierre
        Je viens de le faire mais ça change rien

      • Avec 69 warning en moins sur 72 j’ai du mal à dire que ça change rien.

        Je ne t’accompagnerai pas jusqu’au saint graal du w3c mais au moins puis-je te conseiller de continuer à chercher.

        Notamment :

        • <a href="" rel="nofollow">Se d&eacute;connecter</a> peut être à virer ou regarder du côté de la balise #AUTORISER dans le script de la dist.
        • <span class="centrage">
          			<img src="plugins/lieuxcamp/images/lieuxcamp/bann2.gif" alt="Bienvenue et banni&egrave;re" width="190" height="86" longdesc="" />
          			</span>

          où il faut virer longdesc=""

        • <input type="hidden" name="destinataire[]" value="1" /> ce bout de code est dans un ul alors qu’il devrait être dans un li.

        Avec cela tidy sera vert, pour le w3c il faut peut-être continuer un peu...

        Bon courage

      • Pour moi il en reste 13 et la plupars son du plugins

      • Il y avait juste un input pas au bon endroit. Sauf que c’était un HIDDEN, donc personnellement je m’en fichais pas mal... Mais je l’ai quand même modifié. Après mise à jour ça devrait aller.

      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