Prestashop : Ajouter des champs au formulaire de contact

Ce tutoriel est compatible avec les versions de Prestashop suivantes :
1.5 1.6 1.7.7 1.7.8 +
Cet article est assez ancien, malgré toute l'attention que j' apporte à mes contenus il est possible que celui-ci ne soit plus d'actualité.
N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.

C’est une demande assez régulière , comment ajouter facilement des nouveaux champs sur le formulaire de contact prestashop ?
Avec le code de base il n’est pas évident de rajouter des champs car il n’existe aucun hook particulier qui permets d’utiliser un module sur cette page.

J’ai donc réalisé un nouveau module qui va permettre de rajouter des éléments de manière plus simple.
Ces nouveaux champs seront ensuite envoyés dans l’email récapitulatif au marchand.
( C’est une version basique de preuve de concept qui peut encore grandement évoluer 🙂 , testé uniquement sur la dernière version 1.6.1.4)

Vous pouvez le télécharger depuis github : https://github.com/nenes25/prestashop_contactformfields

Cependant il est pour l’instant nécessaire de comprendre son fonctionnement, et d’éditer du code pour pouvoir ajouter les nouveaux champs.

Avant d’installer le module , il faut éditer le fichier contact-form.tpl de votre thème.
Rajouter le code suivant à l’endroit ou vous souhaitez que les nouveaux champs apparaissent

{* Nouveaux champs pour le formulaire de contact : ce code créé un nouveau hook pour les modules *}
{hook h='contactFormAdditionnalFields'}

Vous pouvez à présent installer le module et sur la page du formulaire de contact vous devez avoir le visuel suivant :

Nouveaux champs

Ajout visuel des nouveaux champs

Le visuel et les noms des nouveaux champs sont éditables dans le fichier

contactformfields/views/templates/hook/hookContactFormAdditionnalFields.tpl

<div class="contactformfields">
<h3>{l s='Additionnal fields' mod='contactformfields'}</h3>
<div class="form-group">
<label>{l s='Additionnal field 1' mod='contactformfields'}</label>
<input type="text" name="additionnal_info1" data-validate="is-required" class="form-control">
</div>
<div class="form-group">
<label>{l s='Additionnal field 2' mod='contactformfields'}</label>
<input type="text" name="additionnal_info2" data-validate="is-required" class="form-control">
</div>
</div>

Vous pouvez ici rajouter tous les nouveaux champs que vous souhaitez.
Cependant les insérer ici ne permettra pas encore de les récupérer.

Traitement des nouveaux champs

Le traitement des nouveaux champs est réalisé en surchargeant le controller ContactController.php via le fichier contactformfields/override/controllers/front/ContactController.php

Si votre champ doit être obligatoire, vous pouvez adapter le code comme sur les lignes suivantes :

//Rajouter ici les vérifications php des nouveaux champs requis
elseif ( !Tools::getValue('additionnal_info1')) {
$this->errors[] = Tools::displayError('Field additionnal_info1 cannot be blank');
}
//Fin du traitement des messages

( Réinitialiser le module une fois les changements effectués pour que l’override soit mis à jour )

Ajout des variables dans l’email

Afin de pouvoir afficher les nouvelles variables, éditer les modèles email : contact.html et contact.txt de votre site.
( mails/fr/contact.html par exemple )  et rajoutez le code suivant la ou vous souhaitez afficher les informations

{contact_additionnal_fields}

Pour l’ajout des variables dans l’email j’ai mis en place un nouveau hook

//On crée un hook personnalisé pour ajouter les nouvelles informations à l'email
//Le hook passe la reference de la variable
HookCore::exec('actionAddContactFormFieldsToEmail',array('var_list' => &$var_list));

cela permets de gérer ces paramètres directement dans le module dans le fichier contactformfields/contactformfields.php dans la fonction hookActionAddContactFormFieldsToEmail

/**
* Ajout des données à l'email
* @param array $params[var_list] => passé par référence
*/
public function hookActionAddContactFormFieldsToEmail($params) {
 
//On mets en forme le contenu qu'on veut rajouter dans l'email
$emailContent = '<span>Additionnal Email fields <br />';
 
if ( Tools::getValue('additionnal_info1') )
$emailContent.= 'Additionnal Field 1 : '.Tools::getValue('additionnal_info1').'<br />';
if ( Tools::getValue('additionnal_info1') )
$emailContent.= 'Additionnal Field 1 : '.Tools::getValue('additionnal_info1');
 
//Gérer ici vos champs de la même manière
 
$emailContent .= '</span>';
 
//On le rajoute dans une variable
$params['var_list']['{contact_additionnal_fields}'] = $emailContent;
}

Ces données seront ensuite bien affichées dans le formulaire récapitulatif comme vous pouvez le voir sur la capture suivante :

Champs dans email

Nous en avons fini avec les explications.
Si vous avez compris le principe il vous est donc possible de rajouter ( plus) facilement des nouveaux champs dans votre formulaire de contact ! 🙂

Le module sera sans doute amené à évoluer vers plus d’automatisation si il y’a un intérêt 🙂
Comme d’hab, vous pouvez également apporter vos contributions directement sur github.

23 réflexions sur “Prestashop : Ajouter des champs au formulaire de contact”

  1. herve (oui, moi aussi ;-))

    Bonjour, j’ai suivi le mode d’emploi mais cela ne fonctionne pas: je récupère toujours en final dans l’e-mail, le nom de la variable et non sa valeur…
    Aurais-je loupé un passage?

    Merci d’avance (sur papier ça a l’air très bien :-))

    1. Bonjour,

      Je viens de tester à nouveau et de mon côté cela fonctionne bien.
      Il faut
      – installer le module
      – modifier le template contact.html pour ajouter le nouveau hook
      – Ajouter le texte {contact_additionnal_fields} dans le contenu de l’email

      Ensuite ça devrait marcher 🙂

      Cordialement,

  2. Bonjour, je ne comprends pas je n’arrive pas à intégrer mes nouveaux champs dans mon modèle d’e-mail. J’ai suivi les étapes une à une, cela fonctionne. Sauf que quand j’envois une demande de contact, dans l’e-mail les champs que j’ai rajouté (nom et téléphone) ne redescendent pas!!! Je suis entrain de m’arracher les cheveux… ai-je oublié quelque chose ?

    1. Bonjour,

      Quelle est votre version de prestashop ?
      Si vous faites d’autres modifications dans l’email est-ce qu’elles apparaissent ?
      Dans le cas contraire, les emails sont sans doute dans le dossier de votre thème.

      Cordialement,

  3. Ma version de prestashop est 1.6.1.4. J’ai testé d’autres modifications et rien ne change, c’est pour cela que je ne comprends pas. Vous voulez dire que peut-être que les modèles d’emails rattachés au formulaire de contact sont peut-être stockés dans un autre dossier ?

    1. Bonjour,
      C’est cela l’email doit etre stocké à un autre emplacement.
      Il est également possible de modifier les contenus des emails directement depuis l’administration, dans les traductions « Traductions des modèles d’e-mails »

      Cordialement,

  4. Matonnier Dominique

    Bonjour,

    Je viens juste d’éssayer d’installer votre module, mais comme je rencontre certain problemes.
    J’ai bien inséré le code dans le fichier contact-form.tpl mais aprés je ne vois pas comment installer le Hook dans la page contact. Désolé j’en suis que a cette endroit et je ne voit pas comment faire.
    Merci pour votre aide

    1. Bonjour,

      C’est tout ce qu’il y a a faire.
      Pour le reste, il suffit d’installer le module et de coder ce que vous souhaitez faire dans les différentes fonctions.

      Cordialement,

  5. Matonnier Dominique

    Ok Merci pour votre réponse mais question stupide comment installer le module? je suis débutant j’ai vu que c’étais un hook mais je ne sais pas comment l’installer.

    Dominique

  6. Bonjour Hervé,

    Tout d’abord merci pour ce module qui risque de me sauver la vie !

    J’ai juste une question pour finaliser :
    Où dois je intégrer :
     » //On crée un hook personnalisé pour ajouter les nouvelles informations à l’email
    //Le hook passe la reference de la variable
    HookCore::exec(‘actionAddContactFormFieldsToEmail’,array(‘var_list’ => &$var_list)); « ?

    Je suppose que c’est dans un Controllers/Front/ContactController.php; Mais je ne suis pas sûre.

    Merci par avance pour votre réponse.

    Cordialement,
    Cynthia

    1. Bonjour Cynthia,

      Si vous installez le module depuis github il n’est pas nécessaire d’insérer ce code.
      Il vous suffit de réaliser vos modifications dans la fonction hookActionAddContactFormFieldsToEmail du module.
      Et les données remonterons toute seules.

      Cordialement,

  7. Bonjour Herve,

    Merci beaucoup pour ce module.

    j’ai cree 3 nouveaux champs que je vois bien dans le formulaire de contact.
    Mon 3eme champ s’appelle additionnal_info3 pour Phone.

    Si je tente de le rentrer dans le fichier contactformfields.php, j’ai un message d’erreur.
    si je fais un copier coller du code champ 1, tout fonctionne mais je me retrouve avec 2 champs similaires.

    Voici la fin de mon contactformfields.php

    public function hookActionAddContactFormFieldsToEmail($params) {

    //On mets en forme le contenu qu’on veut rajouter dans l’email
    $emailContent = ‘Your Identity ‘;

    if ( Tools::getValue(‘additionnal_info1’) )
    $emailContent.= ‘Last name : ‘.Tools::getValue(‘additionnal_info1’). »;
    if ( Tools::getValue(‘additionnal_info2’) )
    $emailContent.= ‘First name : ‘.Tools::getValue(‘additionnal_info2’). »;
    if ( Tools::getValue(‘additionnal_info3) )
    $emailContent.= ‘Phone : ‘.Tools::getValue(‘additionnal_info3’). »;

    $emailContent .=  »;

    //On le rajoute dans une variable
    $params[‘var_list’][‘{contact_additionnal_fields}’] = $emailContent;
    }

    }

    J’ai essaye des dizaines de fois mais rien a faire.

    Merci pou votre aide
    Patricia

    1. Bonjour,
      Dans votre debug avez-vous essayé d’afficher l’ensemble des variables posts disponibles pour voir si votre champ est bien envoyé ?
      avec un Tools::p($_POST); ?

      Cordialement,
      Hervé

  8. Bonjour Herve,
    Merci pour la reponse {c’est adorable) mais je dois avouer que je ne suis pas certaine de comprendre pas la demande.
    Voici ce que j’ai fait :
    1- defines.inc.php
    /* Debug only */
    if (!defined(‘_PS_MODE_DEV_’)) {
    define(‘_PS_MODE_DEV_’, true);
    }
    2- j’envoie mon formulaire
    Message erreur :
    Parse error: syntax error, unexpected ‘;’ in /data/…/…/…_com/www/modules/contactformfields/contactformfields.php on line 96
    est-ce que j’ai bien compris ?
    Merci pour votre reponse
    Cordialement,
    Patricia

    1. Bonjour,

      Effectivement ce message est très utile puisque qu’il détaille l’erreur rencontrée et ou la corriger.
      Il faut donc vérifier cette ligne afin de pouvoir faire fonctionner vos modifications.

  9. Bonjour,

    Merci pour votre temps!
    Comment peut on rajouter un champs « téléphone » sur la version de prestashop 1.7.3 dans le formulaire de contact?

    Merci

    1. Bonjour,
      Ce tutoriel n’est effectivement plus d’actualité pour la version 1.7.
      La gestion du formulaire est entièrement gérée dans le module contactform.

      Il sera donc nécessaire de le surcharger pour apporter des modifications au formulaire de contact.
      Je n’ai pas encore testé la faisabilité de l’ajout des nouveaux champs.

      Cordialement,
      Hervé

  10. Salut à tous,
    j’utilise la version 1.7 de prestashop
    j’ai copié le premier hook indiqué et collé dans le fichier contactform.tpl comme indiqué.
    lors de l’instalation dumodule téléchargé, sur github j’ai rencontré cette erreur
    ** »2G » is not a valid maximum size**.
    j’ai alors décompréssé le module téléchargé dans le dossier module de mon projet…
    mais je ne le retrouve pas dans mes module …
    j’aimerais avoir votre aide pour l’installation de ce module…
    cordialement…

    1. Bonjour,

      Comme évoqué dans mon précédent commentaire, ce tutoriel n’est plus fonctionnel pour prestashop 1.7
      Il faut que je regarde ce qu’il est possible de faire.

      Cordialement,

  11. Bonjour,
    Je vois dans les commentaires précédents que ce tutoriel n’est plus fonctionnel pour prestashop 1.7.
    Ces commentaires commence à dater mais je n’ai pas réussi à trouver de réponse convaincante et surtout qui permettent de sauvegarder les champs ajouter pour prestashop 1.7.
    Auriez vous éventuellement trouvé une solution depuis la rédaction de ce tuto ?
    Je vous remercie par avance,
    Cordialement,

    1. Bonjour Laura,
      La réponse est toujours d’actualité, je ne me suis pas penché sur le problème depuis.
      Je vous suggère de regarder sur addons, de mémoire il y’a des modules qui permettent de gérer des formulaires spécifiques et de remplacer le formulaire de contact.

      Cordialement,
      Hervé

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *