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,

    Le formulaire contact prend la langue par défaut du spip, mon site est multilingue. comment je fait pour que le formulaire quand on est sur la page arabe (et l’auteur rédige en arabe comme en français) s’affiche en arabe sachant que j’ai utilisé les balises

    <multi>[fr] Nom-auteur[ar]إسم الكاتب</multi>

    pour indiquer que celui qui a écrit en français est le même qui écrit en arabe. Pour que finalement les lecteurs arabes trouvent un formulaire de contact à leur langue et les lecteurs français trouve la même chose en français ?

    Répondre à ce message

  • 1
    HirisBen

    Bonjour,
    J’ai installé ce plugin sur un SPIP 3 et cela fonctionnait très bien. Depuis quelques temps les messages n’arrivent plus dans les boîtes mail. Ils restent enregistrés dans la partie privée du site mais ne sont pas rapatriés.
    Autre chose étrange : toutes les personnes qui envoient des messages se retrouvent automatiquement inscrites dans la partie « destinataires » et je ne veux surtout pas cela...
    Ai-je mal configuré le plugin ? Pouvez-vous m’aider SVP je ne sais plus quoi faire.
    Merci !

    • Bonjour, idem que HirisBen !

      Tout fonctionnait bien... et puis plus d’envoi et mêmes effets. Y a-t-il un bug connu et besoin de mise à jour plugin/SPIP ?

      Bien cordialement.

    Répondre à ce message

  • 3

    Bonjour,

    Si on intègre le formulaire de contact avancé dans le squelette d’un article,
    serait-il imaginable de récupérer le #TITRE l’article dans le corps du mail (en pied de mail, par exemple).
    le but est de savoir depuis quel article le mail a été envoyé.

    Une hypotèse :
    Utiliser #ENV
    j’avoue que je sèche.

    Merci d’avance.

    • Vu que dans ce plugin le contenu du mail n’est pas généré avec un squelette, il n’y a pas moyen de le surcharger simplement. Ya qu’en surcharger la fonction traiter() du formulaire en entier. En copiant-collant la même chez soi, mais en enlevant le « _dist » à la fin.

    • Merci de cette réponse et de ces suggestions,

      mais, n’étant pas un expert en formulaire PHP,
      un petit conseil supplémentaire ne serait pas de trop.

      Je ne pars pas, toutefois, de rien :
      pour un site précédent, j’avais du adapter un formulaire qui récupérait le #TITRE de l’article comme suit :

      <?php
      
      /* on va chercher l’url de la page */
      $monUrl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
      
      /*on récupère le contenu de la balise <title> lié à cette url
      
      Avant cela on crée l’affichage du titre de l’annonce en <title> de la page par l’ajout de 
      themes/nom_du_theme/head/page_ma_page.html qui contient :
      <BOUCLE_ma_page_head(ARTICLES) {id_article}>
      <title>[(#TITRE|textebrut)]</title>
      </BOUCLE_ma_page_head>
      */
      function RecupererTitre($Site)
      {
      	$Titre = 'Pas de titre';
      
      	$Fichier = file_get_contents($Site);
      	
      	if (eregi("<title>(.*)</title>", $Fichier, $Sortie)) $Titre = $Sortie[1];
      	
      	return $Titre;
      }
      
      
      /* Exemple : */
      /* echo RecupererTitre($monUrl); */
      
      
      
      /* on stock le titre de la page dans une nouvelle variable */
      $bip = RecupererTitre($monUrl);
      
      /* echo $bip; */

      Ensuite on récupérait la variable $bip contenant le #TITRE pour l’ajouter dans le corps du mail et dans un mail de confirmation d’envoi.

      Mais c’était avec un formulaire totalement indépendant du plugin « Formulaire de contact avancé », ce qui fait perdre les avantages de pouvoir configurer le formulaire depuis l’espace privé.

      D’après ta suggestion, je suppose qu’il faut que je copie, dans « squelettes/formulaires/ », les fichiers contact.php et, peut-être aussi, contact.html du dossier formulaire du plugin « Formulaire de contact avancé », puis que je les modifie.

      Donc si le code ci-dessus marche bien, où me conseilles tu d’insérer la variable $bip, contenant le #titre de l’article ?

      Merci d’avance.

    • Non je t’ai juste dit de surcharger le traiter() du formulaire en copiant-collant la fonction sans le « dist » à la fin. Dans mes_fonctions.php je suppose, ou mes_options.php peut-être. Ensuite tu mets le titre de ton article quelque part dans la variable qui contient le contenu du mail (me rappelle plus son nom), au début ou à la fin par exemple.

      Cela dit, à partir du moment où on veut personnaliser, c’est peut-être plus simple de passer à Formidable dont les mails sont des squelettes, plus facilement personnalisable. Et qui d’ailleurs ajoute de toute façon déjà de base dans le mail, un lien vers la page d’où a été posté le message.

    Répondre à ce message

  • 1

    Bonjour,

    Je suis sous SPIP 2.0.7 (je sais, ça date, mais tout fonctionne tellement bien !) avec le formulaire de contact avancé.

    J’aurais souhaité bénéficier de deux formulaires de contact avancé, pour joindre des personnes différentes. Est-il possible de faire cohabiter deux instances de ce plugin ?

    MERCI de vos pistes...

    Wic

    • Ben c’est marqué dans la doc, tu peux sélectionner plusieurs auteurs différents à qui écrire, mais ne permettre que d’en sélectionner un seul. Ensuite tu appelles ton formulaire en pré-sélectionnant l’un des deux auteurs suivant où tu mets ton formulaire, comme expliqué plus haut dans cette page : <formulaire|contact|auteur=123>.

    Répondre à ce message

  • 1
    sibeles13

    bonjour, une question un peu nulle vu le degré des échanges ici (je débute), mais y-a-t-il moyen de faire en sorte que tous les champs soient alignés dans le formulaire ? comme ils collent aux textes, cela créé un effet de dégragé pas très agréable. Que devrais-je mettre dans ma .css pour corriger cela ? (et encore pardon si ma question paraît triviale ou la réponse évidente..)

    • sibeles13

      bien, j’ai maintenant un autre probleme, bien plus important. J’ai fait fonctionner ce plugin (formulaire de contact avancé 0.10.3) ... une fois. J’ai bien vu la fenetre avec une demande de confirmation, puis l’annonce de l’envoi. Mais voila, quand j’ai voulu recommencer, peu de temps après, plus rien : la page reste telle quelle, sans aucune indication, et les mails ne sont visiblement pas envoyés. J’ai testé aussi le plugin facteur (2.4.5), et il fonctionne, j’ai reçu le mail. Quelqu’un aurait une piste ? merci
      PHP Version 5.2.17

    Répondre à ce message

  • 2
    haqqtiviste

    re bonjour

    l’url pour trouver les messages enregistrés sur le site serait celle ci : ?exec=contact_messages

    mais à cet url, j’ai cette erreur :

    Fatal error : Call to undefined function navigation_pagination() in /homez.577/crifranc/www/ecrire/inc/presenter_liste.php on line 107

    Répondre à ce message

  • 3

    Bonjour,
    Je voudrais créer un article contenant le formulaire de contact avancé. Dans mon article, j’ai inscrit

    < formulaire|contact >

    (sans espace entre < et formulaire et contact et >
    Lorsque j’enregistre, je vois bien mon formulaire dans la partie privée. Sur la partie publique, là où je devrais voir le formulaire, s’affiche le texte suivant.

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

    Qu’ai-je oublié de faire ? SPIP 2.19, Squelette Viaspip
    Merci pour la réponse.

    • Et en désactivant les plugins non obligatoire pour celui-là, afin de tester que ce soit bien ce plugin en cause ?

    • Bonjour,
      Merci pour la réponse rapide. J’ai testé en désactivant des plugins et le responsable est celui correspondant au squelette du site : ViaSPIP 2.1.10b de JY Giraud. Plutôt gênant non ?

    • À voir avec son auteur donc...

      Le squelette n’utilise pas #TEXTE<code> tel quel, mais utilise <code>[(#TEXTE*|ancres_intertitres{#ID_ARTICLE}|propre|image_reduire{600,0})]. Donc possible que le filtre qui passe avant propre() (qui gère les modèles) casse quelque chose dans l’histoire. Si c’est le cas ça vaudrait pour n’importe quel formulaire d’ailleurs, pas spécialement celui-là mais pour le modèle « formulaire » en général.

    Répondre à ce message

  • 3
    Juno_107

    Bonjour,
    j’ai mis ce formulaire sur mon spip or quand je confirme l’envoi du mail, il me retourne une série d’erreurs :
    Warning : strpos() expects parameter 1 to be string, array given in /home/mon-espaceweb/public_html/répertoire-Spip/ecrire/inc/filtres.php on line 458

    Warning : strpos() expects parameter 1 to be string, array given in /home/mon-espaceweb/public_html/répertoire-Spip/ecrire/inc/charsets.php on line 209

    Warning : preg_match_all() expects parameter 2 to be string, array given in /home/mon-espaceweb/public_html/répertoire-Spip/ecrire/inc/charsets.php on line 505

    Warning : preg_match_all() expects parameter 2 to be string, array given in /home/mon-espaceweb/public_html/répertoire-Spip/ecrire/inc/charsets.php on line 515

    Warning : wordwrap() expects parameter 1 to be string, array given in /home/mon-espaceweb/public_html/répertoire-Spip/ecrire/inc/envoyer_mail.php on line 162

    Pour l’instant, je n’ai pas encore touché ces fichiers => il s’agit d’une variable non-déclarée et comme le spip,il fait ses petits sur un ensemble de templates, j’y vais avec des pincettes.
    Quelqu’un a-t-il contourné ce bug ?
    environnement : SPIP 2.0.22

    autre info : je ne reçois pas non plus le résultat du formulaire dans ma mailbox, ce qui est assez embétant par ailleurs

    Répondre à ce message

  • Mandelkow

    Est-il possible d´envoyer un mail à deux personnes en même temps via la balise dans un article ? Ex. : <formulaire|contact|auteur=2,34> Ou comment faut-il procéder ?

    Répondre à ce message

  • haqqtiviste

    bonjour
    sous SPIP 3.05, plugin facteur + contact et autres

    le menu « activité > message enregistrés » n’apparait pas en bandeau.

    une piste ? ou une adresse directe ?

    merci

    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