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

  • 1

    Bonjour,
    est ce que la fonction mail utilise par ce plugin fonctionne chez free.
    J ai fait un test qui n a pas ete tres concluant ....
    Est ce que quelqu un a deja rencontre ce probleme ?

    Merci de vos reponses.

    • Il n’y a qu’une fonction mail() dans PHP et elle a été désactivée il y a déjà un certain temps par Free. Mais vous avez une autre option : installer le plugin Facteur qui permet d’utiliser un serveur SMTP personnalisé (par exemple le votre, celui de votre email).

      Vous pouvez le récupérer par SVN, ou bien avec ce ZIP : http://files.spip.org/spip-zone/plugin_facteur.zip

      En bonus, avec Facteur d’activé, le plugin Contact permet aussi l’envoi de pièces jointes par les visiteurs.

    Répondre à ce message

  • 8

    Bonjour à tous,

    j’ai installé la version 29697 en conjonction avec le plugin facteur (29345) pour envoyer des emails avec pièces jointes, et ça fonctionne bien SAUF dans le cas ou le nom du fichier contient un caractère accentué.

    Dans ce cas, l’email part sans pièce jointe et le fichier « attaché » reste collé dans le répertoire tmp/contact_pj.

    S’agit-il d’une spécificité de mon hébergement, d’un shmurtz résiduel du plugin contact ou d’un défaut du plugin facteur ?

    Help :) !

    • Argh. Je vais tester ça, j’avoue que je n’ai jamais mis d’accent dans des noms de fichiers, notamment parce que ça fout la merde car les système windows et unix ne gèrent pas ces noms de la même manière. Donc quand on est régulièrement amené à passer des fichiers de l’un à l’autre... on fait gaffe.

      Je fais des tests et je corrige dès que possible.

    • Merci.

      J’ai pensé à insérer une fonction de renommage du fichier sur le serveur une fois l’upload effectué (virer les caractères accentués, les espaces, etc.) mais j’ai pas vraiment le temps ni le niveau pour m’autoriser une intrusion dans le code :) ...

      Je bosse pour des juristes, qui ne savent pas ce qu’est unix ni une page de code, et qui croient qu’un ordinateur portable est synonyme de windows... Va leur expliquer qu’il faute éviter les caractères spéciaux dans un nom de fichier !

    • C’est fait ! La version 0.5.2 du plugin modifie les noms de fichier des PJ afin de faire :

      • une translitteration (tout en ASCII) donc plus d’accents
      • tout en minuscule
      • les espaces (y compris multiples) remplacés par un seul « _ »

      Avec ça... devrait plus y avoir de conflit, ou alors ça n’a rien à voir avec le plugin. :)

    • Bonjour,
      je viens d’installer le plugins sous SPIP 2.0.8 avec le squelette Eva web 4.
      Le formulaire est tronqué (le titre « envoyez un message » n’apparait pas)et quand j’envoie (message avec ou sans accents !) j’ai :

      Warning : rawurldecode() expects parameter 1 to be string, array given in ... /ecrire/inc/filtres.php on line 1762

      Mais j’ai aussi le bouton « confirmer l’envoi » bien que collé au haut du formulaire donc pas très visible et l’envoi fonctionne.
      Est ce que cela peut venir d’un souci de compatibilité avec les squelettes Eva à votre avis ??
      En tout cas merci pour ce plugin qui est bien utile.

      • Pour les erreurs d’affichage : c’est uniquement une question de style CSS. Moi je ne connais pas comment est stylé le squelette Eva, mais c’est à vous d’adapter suivant votre utilisation (les gens qui font Eva ne peuvent pas prévoir tous les plugins qu’installeront les utilisateurs). Est-ce qu’il y a une URL publique sur laquelle je pourrais voir votre problème ?
      • Pour l’erreur de rawurldecode(), c’est un bug de SPIP qui a été, il me semble, corrigé sur la branche stable. Il faut donc soit avoir téléchargé SPIP depuis SVN, soit attendre la version mineure 2.0.9 qui inclura cette correction. En attendant vous pouvez toujours configurer votre PHP pour qu’il n’affiche pas les « Warning » (ce sont les erreurs non bloquantes contrairement aux « Error »).
    • Merci de votre réponse,
      Pour l’affichage, je ne suis pas suffisamment calée en programmation (ni en SPIP non plus) pour adapter les CSS quelque part, j’essayerai avec d’autres habillages proposés avec Eva.
      Pour le rawuldecode, je vais me renseigner pour configurer le PHP (à partir du PHPmyadmin ?) La version de SPIP utilisée est la 2.0.8. de début juillet.
      Le site qui utilise le formulaire : http://www.apsi.webou.net (rubrique CONTACT)

    • Le site qui utilise le formulaire : http://www.apsi.webou.net (rubrique CONTACT)

      Je ne saurais pas dire si c’est Eva ou si c’est propre à votre adaptation personnelle mais les formulaires ne sont pas très bien stylés. Nulle part. Car ce sont un peu les mêmes problèmes d’affichage sur la page de connexion (http://www.apsi.webou.net/spip.php?page=login).

      Il faut modifier les styles CSS suivant vos goûts maintenant...

    • Merci RastaPopoulos pour ta réactivité :) .

    Répondre à ce message

  • 2

    Bonjour,
    J’ai installé le plugin sur un site spip 2.0.3
    J’ai créé un article contact où j’ai placé le tag de génération du formulaire contact.
    Tout se passe bien jusqu’à la prévisualisation, mais quand je clique sur l’envoi apparait le message :
    Warning : join() [function.join] : Bad arguments. in [...]/plugins/contact/formulaires/contact.php on line 204
    Je peux lire « message envoyé » mais je ne reçoit rien ;c(
    J’ai désactivé le couteau suisse, mon hébergeur OVH ne semble pas bloquer les mails automatiques.
    Je ne vois pas trop quoi faire ...
    Merci de m’aider.

    Jean Marc

    • Oups désolé, j’ai ajouté une fonctionnalité (pas encore documentée) la semaine dernière, et j’ai laissé un bug derrière moi.

      C’est corrigé sur le SVN, mais il faut attendre au moins 19h30 pour une nouvelle génération du paquet ZIP (suivant comment vous l’avez installé).

    • Merci RastaPopoulos,

      la réinstallation du plugin a résolu mon problème.

      Bravo pour ce bel outil !

      Jean Marc

    Répondre à ce message

  • 6

    Bonjour,
    Merci pour ce plugin simple et efficace. J’utilise des auteurs « bidon » pour la liste des destinataires. Ex : « Question sur le heavy metal » envoi à bob@mail.com, « Question sur le reagae » envoi à ziggy@mail.com, ... Et ça marche plutôt bien ! Ce que j’aimerai, c’est le champ Sujet prenne la valeur du destinataire sélectionné lors de l’envoi du mail(Par ex : « Question sur le reagae »). J’ai passé la journée sur le contact.php sans trouver. Je débute et je suis peut-être un peu bille, mais vu qu’on a le destinataire, il doit bien y avoir un moyen de le récupérer et de l’affecter au sujet. Non ?
    Merci pour vos lumières

    • Pour personnaliser le sujet du courrier, vous devez trouver cette portion de code :

      $mail = sql_allfetsel(
      	'email',
      	'spip_auteurs',
      	'id_auteur IN ('.join(', ', $destinataire).')'
      );
      $mail = array_map('reset', $mail);
      $mail = join(', ', $mail);

      Et la modifier afin de récupérer le nom des auteurs, avec quelque chose comme :

      $requete = sql_allfetsel(
      	'email, nom',
      	'spip_auteurs',
      	'id_auteur IN ('.join(', ', $destinataire).')'
      );
      $mail = array_map('array_shift', $requete);
      $mail = join(', ', $mail);
      $sujet = array_map('array_shift', $requete);
      $sujet = join(', ', $sujet);

      Du coup, vous pouvez aussi supprimer le champ du sujet dans contact.html, qui n’a plus lieu d’être.

      Attention : faites bien vos modifications en copiant les fichiers à modifier dans votre dossier squelettes/, afin que ça ne soit pas écrasé lorsque le plugin sera mis à jour. Et si le plugin est mis à jour, il faut aussi penser à refaire la manip afin de profiter des évolutions puisque c’est le fichier dans squelettes/ qui sera pris en compte.

    • Merci RastaPopoulos pour cette réponse rapide, j’aurais pas trouvé. Cela fonctionne bien, mais c’est pas l’adresse que je cherche à affecter au sujet mais l’auteur associé (en l’occurrence pas bob@mail.com mais « Question sur le reggae »). Sans vouloir abuser, est-il possible aussi de ne pas supprimer le sujet dans contact.html, mais plutôt de lui affecter cette nouvelle valeur pour que la prévisualisation affiche bien « Sujet : Question sur le reggae ».
      Merci d’avoir rappelé que les modifs se font évidemment dans /squelettes.
      Thanks again,

    • Pour le sujet = ..., faut remplacer array_shift par array_pop.

      Pour le sujet dans la prévisu, faut faire un truc du style :

      <BOUCLE_sujet(AUTEURS){id_auteur IN #ENV{destinataire}}{", "}>
              #NOM
      </BOUCLE_sujet>
    • Pour le sujet (dans .php) impeccable ça fonctionne à merveille.
      Pour la prévisu, je rame, pas moyen d’afficher quelque chose. Je l’ai mis à la place de :
      [

      Sujet : (#ENVsujet_contact)

      ]
      Ca doit être énorme, mais ça m’échappe. Merci.

    • Je crois qu’il faut rajouter le critère {tous} car par défaut un auteur qui n’a jamais rien écrit ne sort pas dans la boucle AUTEURS.

    • C’est nickel, merci !
      Je me rends compte, qu’en fait il faut bien connaitre Spip pour pouvoir faire des modifs... En tous cas, chapeau pour le support !!!

    Répondre à ce message

  • 1
    Renaud Hennino

    Bonjour,
    je viens d’installer le plugin sur le site dont je suis en charge http://www3.ac-grenoble.fr/lycee/delorme.isle.abeau/spip/. Il est sous sarka spip avec la version 2.0.5 de SPIP. J’ai lu comment installer le plugin, mais je ne suis pas sûr d’avoir compris si installer le plugin suffit ou si une modification de certaines pages du squelette sont à faire (et dans ce cas où puis-je trouver les informations pour savoir où modifier et quoi modifier)
    En tout cas après avoir activé le plugin et configuré les destinataires, l’introduction et avoir validé les changements, je clique sur le bouton contact et je n’ai pas de changement : pas d’introduction, pas de mail envoyé aux autres rédacteurs déclarés dans la config.
    Désolé si cette question a une réponse triviale mais je ne trouve pas de solutions à mon problème.
    Merci d’avance

    • Comme indiqué dans le paragraphe « Utilisation », le formulaire est appelé avec la balise #FORMULAIRE_CONTACT dans un squelette, ou bien avec le modèle <formulaire|contact> dans un texte contenu du site (article, rubrique, etc).

      Donc à vous de placer l’un ou l’autre quelque part. Je ne connais pas du tout sarka-spip, mais s’il existe un des squelettes dédié à la page de contact (contact.html) alors il faut le modifier afin de supprimer ce dont vous ne voulez plus, et le remplacer par #FORMULAIRE_CONTACT.

      Vous pouvez aussi demander aux auteurs de sarka-spip de prendre en compte le plugin Contact s’il est activé. Par exemple : s’il n’est pas là, mettre le formulaire actuel qu’ils utilisent (qui est #FORMULAIRE_ECRIRE_AUTEUR à priori) mais s’il est là, mettre le formulaire configurable. C’est assez simple à faire, et ainsi les utilisateurs n’auraient pas à modifier le squelette, ce serait automatique.

    Répondre à ce message

  • olivier

    Non en fait c’est de ma faute, j’avais supprimé dans contact.html le sujet, ce qui ne lui a pas plu.
    J’ai donc tout remis dans l’ordre.

    Désolé et merci pour ta réponse.

    Répondre à ce message

  • 1
    olivier

    Bonjour,

    le message ne part pas quand je valide. Je n’ai pas de message d’erreur pour m’aider. Avez-vous une piste ?

    Merci

    • Est-ce que les autres messages de SPIP partent ? Par exemple ceux pour s’inscrire sur le site, ou bien ceux pour confirmer une publication d’articles, etc. Car ce plugin utilise la même fonction d’envoi que celle de base de SPIP.

    Répondre à ce message

  • Bonjour,

    moi aussi je rencontre le problème de rawurldecode. Apparemment le problème vient du fait que la variable « destinataire » soit un tableau... Avez-vous une idée ?

    Répondre à ce message

  • 7

    Bonjour, lorsque j’envoie un message par ce formulaire j’ai systématiquement un message d’erreur qui s’affiche avant de confirmer :

    Warning : rawurldecode() expects parameter 1 to be string, array given in /homez.131/####/www/ecrire/inc/filtres.php on line 1762

    Cela ne bloque pas l’envoi du message.

    Merci

    • Bonjour ;

      j’aimerai savoir est ce que vous avez résolu le problème rawurldecode car moi aussi j’ai le même problème quand j’envoie un message.

      Warning : rawurldecode() expects parameter 1 to be string, array given in /homez.131/####/www/ecrire/inc/filtres.php on line 1762 Cela ne bloque pas l’envoi du message.
      Merci d’avance

    • Bonjours, toujours pas résolu, j’attends une solution éventuelle du forum, j’ai mis le problème en attente.

    • La fonction rawurldecode() n’est jamais utilisée dans aucun fichier du plugin. Donc il y a de fortes chances que l’erreur vienne soit de SPIP, soit de votre code.

      Lorsque survient l’erreur, est-ce que vous pouvez me donner la valeur de l’attribut « action » du formulaire, dans le HTML ? Et ce avant ET après l’envoi. Il suffit d’afficher le code source et de regarder <form action="?????".

    • bonjour
      le message apparaitre dès que on clic sur envoyer un le message.

      je sais pas exactement valeur de l’attribut action. mais vous pouvez le teste vous même ;
      voici le lien :

      http://aourir.fr/spip.php?rubrique13

      et merci

    • Il semble qu’il y ait une joyeux mélange dans le code avec une partie du head écrit au début du body.

      Une piste : regarder si la balise #INSERT_HEAD est bien entre <head> et </head>

    • Et juste pour tester (ça se trouve ça n’a rien à voir mais sait-on jamais), essayez de désactiver totalement le couteau suisse.

    • En effet ça n’a rien à voir avec le couteau suisse.

      le problème est résolu en utilisant l’Appel AJAX (sans rechargement de la page) dans le squelette et dans l’article.

    Répondre à ce message

  • 1

    Bonjour,

    j’ai bien installe ce plugin ça marche (sous spip 2.08), mais la mise en forme de formulaire est un peu dégradé.

    est ce qu’il y a une feuille CSS pour remède a ce désagrément.

    voila le lien vers le formulaire : http://aourir.fr/spip.php?rubrique13

    merci d’avance

    • Ben oui : tout dépend de vos CSS. Le formulaire utilise tout simplement les recommandations sur la structure HTML préconisées par l’équipe de SPIP. Donc soit vous faites vos propres styles pour le formulaire, soit vous utiliser la feuille « spip_formulaires.css » fournit par défaut avec SPIP (qui fait une mise en page des formulaires minimale mais cohérente), soit ce qui est le plus simple et le plus courant, vous faites un mix des deux (« spip_formulaires.css » de SPIP et des choses en plus ou en moins avec).

    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