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

  • Bonjour,
    merci pour ce plugin.

    Une chose qui l’améliorerai pour moi : répondre au mail reçu via le formulaire devrait être adressé à la personne qui a écrit via le formulaire et non à l’dresse du webmestre.

    Par exemple en ce temps de vacances il y a tout ces réponses d’absence automatiques qui n’arrivent pas à la bonne personne..

    Bonne journée
    joz

    Répondre à ce message

  • 1

    Bonjour,

    J’aimerai savoir comment je peux faire pour rendre le fichier joint obligatoire. Je l’utilise pour une inscription et j’aimerai que les gens mettent une photo en fichier joint.

    Merci d’avance pour vos réponses.

    • Ce n’est pas prévu, les fichiers joints sont juste des trucs en plus. Même s’il a augmenté un peu (beaucoup…) au fil du temps, ce plugin a juste pour but de faire un formulaire de contact légèrement configurable, mais simple. Il n’est pas prévu de gérer des cas détournés.

      Pour des formulaires plus configurables c’est normalement le plugin Formidable, mais malheureusement ce dernier ne sait pas encore gérer les fichiers joints… Donc je n’ai pas de solution sous la main pour l’instant.

    Répondre à ce message

  • dessign INFOGRAPHISTE VIDEO-PRINT-WEB

    Super plug-in bravo et la création de nouveaux champs est vraiment simple
    une fois que l’on a rectifié cette petite érreur dans l’explication

    « 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. »

    c’est contact_fonctions.php
    il suffit juste d’en rajouter et de créer les pages html dans formulaires

    merci

    Répondre à ce message

  • 2

    Merci pour le plugin, qui fonctionne très bien !
    Une question : Quel système est géré pour la case de formulaire • inscription sur infoliens ?
    Quel plugin dois-je utiliser ? spip-listes ? les inscriptions se feront automatiquement ?

    Merci !

    • Je ne sais pas, ce n’est pas moi qui ai ajouté ça.

      Mais c’est d’ailleurs bizarre que cette option apparaisse si le plugin nécessaire à son utilisation n’est pas lui-même activé. Normalement une option facultative dépendante d’un autre plugin ne devrait pas être affichée si on a pas ce plugin en question.

    • Eh oui ça me semble logique aussi… sauf si cette case n’est qu’une case ’informative’ servant simplement d’indicateur à celui qui traitera le mail… et qu’elle n’est reliée à un plugin…

    Répondre à ce message

  • 1

    Bonjour,

    sur un spip 3.0.16 et une version à jour de Contact, j’essaie de créer un champ supplémentaire dans mes_options.php (dosisier squelettes)

    $GLOBALS['spip_pipeline']['contact_infos_supplementaires'] .= '|refurl_contact_infos_supplementaires';
    	
        function refurl_contact_infos_supplementaires($champs){
        $champs['reference_url'] = 'URL';    
        return $champs;
        }

    mais rien de rien ????

    une idée ?

    merci,
    R. Burton

    • Même problème chez moi.

      Du coup j’y suis allé à la barbare, mais ça fonctionne : déclare ton champ supplémentaire directement dans le tableau « champs » de la fonction « contact_infos_supplementaires » du fichier du plugin : /contact/contact_fonctions.php

    Répondre à ce message

  • 10

    1re question :
    lorsque dans le couteau suisse, la « lame » « MailCrypt » est activée,
    dans le message que l’on reçoit, le courriel de l’expéditeur n’a pas d’arobase, mais un espace à la place, et, plus gênant, il n’y a d’URL que sur le nom de domaine,
    ce qui donne, en prenant pour exemple une adresse gmail.com, une URL uniquement sur gmail.com et non un lien mailto.

    2e question :
    serait-il possible de maîtriser le contenu du courriel que l’on reçoit ?

    Pour les infos entrées par l’expéditeur (les coordonnées notamment), le terme « Nom : » n’est pas précédé d’un espace et est donc collé au prénom, de même pour le terme « Téléphone » qui se retrouve collé au nom.

    Merci d’avance.

    • Bonjour !
      Même question : le rendu du message reçu n’est pas chouette, les contenus des champs étant les uns à la suite des autres sans séparateur.
      Mais je n’arrive par à modifier cela. Comment mettre un retour à la ligne ? Je pense que ça doit se situer dans contact.php, non ? Je vois ceci vers les lignes 289-290, mais ça n’a pas l’air de changer quoi que ce soit si je modifie :

      // Sauvegarder un soupcon de liste dans le mail
      	$texte_final = preg_replace (array('/<li>/','/<\/li>/','/<\/ul>/'), array("- ","\n","\n"), $texte_final);

      Un p’tit coup de main ne serait pas de refus.
      Merci

    • Bonsoir

      Même problème, si quelqu’un sait comment modifier le mél reçu, ça m’arrangerait

      Merci d’avance :-)

    • Je viens de poser une question semblable sur le plugin Facteur.
      L’un de vous trois a-t-il trouvé la solution ?

      Je cherche en outre à supprimer la mention
      « Ce message est enregistré sur votre site : http://www.... »

      @mirobolous

      Ça ne doit pas être dans contact.php car en passant la ligne 278 en commentaire :
      $texte .= "\n\n "._T('envoi_via_le_site')." ".$nom_site." ( ".$GLOBALS['meta']['adresse_site']."/ ) \n";

      ... la mention « Envoyé par Nom du Site » est toujours présente en bas du mail.

    • Bonjour,

      Concernant les champs qui sont collés à la queue-leu-leu (nom, prénom, etc.) dans le mail généré, j’ai trouvé le « coupable ». Il s’agit (en tout cas chez moi) d’une incompabilité avec le plugin Enluminures typographiques.

      Problème : j’en ai impérativement besoin dans l’un des sites que je gère, et je n’ai aucune idée de la manière dont je pourrais corriger ça. Une idée ?

    • Aucune idée je ne sais pas ce que pourrait faire se plugin sur un code déjà généré, ça ajoute des css ? ça modifie le html ? Faut voir sur son forum (ce n’est pas au plugin contact de le prendre en compte, mais au plugin enluminure de ne rien casser lorsqu’il s’insère).

    • Je ne sais pas non plus comment il interfère. Tout ce que je sais, c’est que quand je le désactive, le mail retrouve sa forme normale. Au moins, ça donne une piste pour investiguer car jusqu’à présent, c’était le trou noir. :-) Je vais un peu chercher de ce côté et poster sur le forum d’enluminure si je ne trouve pas. Merci RastaPopoulos.

    • Posté trop vite...

      Concernant la 2e partie de ma question du 14 mars, sais-tu quel fichier je dois surcharger pour ne plus avoir la mention « Ce message est enregistré sur votre site : http://.... » dans le mail ? J’ai cherché partout mais manifestement, je n’ai pas les bonnes lunettes. ;-) Merci !

    • Je ne crois pas que cette partie soit surchargeable, je crois que c’est ajouté durant le PHP.
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/contact/trunk/formulaires/contact.php#L378

    • D’accord, je vais regarder de ce côté.

      Le propriétaire du site trouve cette mention gênante lorsqu’il répond au mail en laissant le message d’origine pour le bon suivi de l’échange avec son correspondant. Et je dois avouer que je suis assez d’accord avec lui. Mais on ne pense pas toujours à la supprimer avant d’envoyer la réponse.

      Un grand merci pour ton aide. Bonne soirée et excellent week-end.

    • Petit feedback si ça peut servir à d’autres : j’ai dupliqué contact.php dans squelettes/formulaires et placé les lignes 378 à 384 en commentaire et ça marche au poil ! :-)

    Répondre à ce message

  • 1

    Quelqu’un sait-il a quoi est du le message d’erreur suivant ? :
    Une erreur de transmission s’est produite, merci de renouveller vôtre demande.

    • Non, il faudrait regarder les logs dans tmp/log/. Dans spip.log ou bien si tu as Facteur, dans facteur.log ou facteur.err.log.

    Répondre à ce message

  • 1

    Bonjour,
    J’ai le formulaire de contact sur toutes les pages de mon site, est-il possible de passer le titre (ou l’url) de la page au formulaire ? (je pourrai le mettre dans le sujet par exemple)

    Merci beaucoup !

    Répondre à ce message

  • 8

    Bonjour,

    Je comprend pas pourquoi quand quelqu’un me contact par le formulaire et que cela est ensuite transféré sur ma boîte mail, je suis l’envoyeur dans le mail que je reçois ?

    Cela me pose surtout problème quand je branche mon répondeur automatique (loin du bureau, chantier, ...) sur ma boîte mail et qui donc ne fonctionne pas avec les gens qui me contact par le website. Ce qui est ennuyeux c’est que les gens qui me contact par le website sont des premières prises de contact professionnelle.

    Est-ce qu’il est possible de changer cela ?

    • L’envoyeur n’est pas spécialement ton adresse de destinataire mais c’est le site, donc l’adresse configuré dans le site ou dans Facteur.

      Par contre le visiteur est bien placé dans l’entête standard « respond-to » (répondre à…), si dans le client mail tu cliques sur « Répondre », ça pré-remplit bien avec le mail du visiteur. Si le répondeur automatique ne connait pas l’entête standard « respond-to », ben… je ne sais pas. :(

    • Voici le dernier mail en date reçu (image ci-dessous). Il n’y que mon adresse email qui apparaît partout. Le seul endroit où le nom du visiteur apparaît c’est dans le corps du mail.

       :(

      Que faire ?

    • Pourtant juste avant l’envoi du mail, on met bien le mail du posteur dans l’entête de réponse ligne 392 :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/contact/trunk/formulaires/contact.php#L392

      Tu utilises Facteur ?

    • Non j’utilise pas Facteur.

      J’ai mis en image (ci-dessous) la liste de mes plugins et mon spip est 3.0.14

      Et j’avoue que je suis un peu rouillé en Spip, tellement que j’ai du engager Bruno (b_b) pour le passage en Spip3.

      G

    • Il est possible que la directive « repondre_a » transmise à la fonction d’envoi de mail, ne fonctionne qu’en ayant le plugin Facteur, qui est une surcharge de la fonction d’envoi de SPIP contenant plus de fonctionnalités (car intègre la librairie PHPMailer).

    • J’ai installé le plugin Facteur et j’ai fait un test et en théorie cela marche (voir image ci-dessous).
      Le « répondre à : » est indiqué avec l’adresse test (pipo@pipo.org), mais cela ne fonctionne pas, c-à-d si je veux répondre à ce mail il ne le prend pas en considération et me propose de répondre à mon propre émail ??? (testé dans deux boîtes mail différentes Gmail et Unibox)

    • Est-ce que j’ai une chance de résoudre mon problème en passant sur Formidable ?

    • Normalement oui, Formidable met lui-aussi dans le champ « Reply-To » (et personnellement ça marche parfaitement dans mon client mail), mais il y a en plus une option pour « forcer » à le mettre dans le champ « From ».

    Répondre à ce message

  • 2

    Je découvre que si les données sont enregistrées dans la table spip_messages il n’en est rien sauf erreur de ma part pour les destinataires des messages. Cette limitation peut-elle être contournée d’une manière ou d’une autre s’il vous plaît ?

    • ça c’est une fonctionnalité qu’il serait intéressant d’intégrer. Ce qui doit être très facile en complétant la variable texte enregistrée en base.

      Je n’ai vraiment pas le temps pour l’instant, qui s’y colle ?

    • Le but de ce plugin n’était pas de remplir des tables avec des données, mais de permettre un formulaire de contact légèrement personnalisable, avec le moins d’options possibles.

      Si on veut enregistrer des données, le nom, le prénom, la profession, etc, c’est plutôt Formidable (ou avant F&T) qui correspond à cet usage.

    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