Prestashop (1.7) : Modifier des champs du formulaire de contact

Prestashop propose une page contenant un formulaire de contact afin que les visiteurs et utilisateurs de votre boutique puissent communiquer avec vous.
Cependant ce formulaire est peu personnalisable. Nous allons voir ci-dessous comment personnaliser ce formulaire. Notre exemple consistera en l’ajout d’un champ supplémentaire, mais la procédure permet permet de comprendre comment faire pour également supprimer ou modifier des champs existants.

Premièrement nous allons modifier le template du formulaire de contact afin de lui ajouter un champ.
Pour cela nous allons récupérer le template qui se situe dans votre thème (thème parent) ou bien directement dans le module « contactform » de prestashop.
Donc soit dans :

/themes/votre-theme-parent/modules/contactform/views/templates/widget/contactform.tpl

Soit dans

/modules/contactform/views/templates/widget/contactform.tpl

Et copier ce fichier dans votre theme enfant pour pouvoir le modifier proprement. C’est à dire dans :

/themes/votre-theme-enfant/modules/contactform/views/templates/widget/contactform.tpl

Vous pouvez maintenant faire vos modifications dans ce fichier. Par exemple pour ajouter un champ « Téléphone » (avec bien sur le html à adapter en fonction de votre thème et de la présentation souhaité) :

<div class="form-group row">
    <div class="col-md-12">
        <input class="form-control" name="phone" type="text" placeholder="Téléphone" value="{$contact.phone}">
    </div>
</div>

La seconde étape consiste à overrider le module contactform en étendant la classe « ContactForm » que vous trouverez dans le fichier :

/modules/contactform/contactform.php

Pour cela nous créons le fichiers suivant :

/override/modules/contactform/contactform.php

qui contiendra le code suivant (pour commencer) :

<?php

if (!defined('_PS_VERSION_')) {
    exit;
}

class ContactFormOverride extends Contactform {

//code à venir

}

On va à présent remplacer la ligne « //code à venir » en copiant telles quelles les 2 fonctions « getWidgetVariables » et « sendMessage » présentent dans le fichier d’origine :

/modules/contactform/contactform.php

On adapter les ligne de la fonction « getWidgetVariables » pour ajouter notre champs :

//...
//ajout de notre champ
$this->contact['phone'] = html_entity_decode(Tools::getValue('phone'));
//code d'origine
$this->contact['contacts'] = $this->getTemplateVarContact();
$this->contact['message'] = html_entity_decode(Tools::getValue('message'));
//etc...

Passons à la fonction « sendMessage » ou il va falloir modifier plusieurs partie du code, mais ces parties sont assez facile à repérer.
Il s’agit des 3 suivantes :

//debut de la fonction
$extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg');
$file_attachment = Tools::fileAttachment('fileUpload');
$message = trim(Tools::getValue('message'));
//ajout de notre champs
$phone = trim(Tools::getValue('phone'));
//...
//controle des différentes champs du formulaire
} elseif (!Validate::isCleanHtml($message)) {
    $this->context->controller->errors[] = $this->trans('Invalid message', array(), 'Shop.Notifications.Error');
} elseif (!Validate::isCleanHtml($phone)) {//contrôle de notre champ supplémentaire.
    $this->context->controller->errors[] = $this->trans('Téléphone invalide', array(), 'Shop.Notifications.Error');
}//....
$var_list = [
   '{order_name}' => '-',
   '{attached_file}' => '-',
   '{message}' => Tools::nl2br(stripslashes($message)),
   '{email}' => $from,
   '{product_name}' => '',
   '{phone}' => Tools::nl2br(stripslashes($phone)),//notre ajout
 ];

Il nous reste une dernière étape, il s’agit de modifier les templates correspondant à l’email transmis par le formulaire.
Vous pouvez retrouver ces template dans

/mails/fr/contact.html
/mails/fr/contact.txt

en adaptant la partie /fr/ selon votre language.
Vous devez copier ces fichier dans votre thème enfant :

/themes/votre-theme-enfant/mails/fr/contact.html
...

Et modifier leur contenus en ajoutant les informations concernant le nouveau champ.
Par exemple :

<span style="color:#333"><strong>Téléphone du client :</strong></span> {phone}<br /><br />

Normalement tout est bon !

13 réflexions sur « Prestashop (1.7) : Modifier des champs du formulaire de contact »

  1. Benjamin

    Hello !

    Super tuto, merci !

    Chez moi, cela ne marchait pas alors j’ai aussi fait :

    – /themes/votre-theme-enfant/mails/fr/contact.html et contact.txt : le dossier n’existait pas, je l’ai créé (j’ai aussi copié les fichiers dans /mails/fr/)
    – j’ai ajouté id= »checkrgpd » (le nom de mon champ additionnel)
    – j’ai carrément collé les fonctions en entier dans l’override, en ajoutant les lignes proposées

    Passé cela, tout fonctionne sauf une chose : si la personne n’a pas coché la case, le mail est quand même envoyé !

    Répondre
  2. negonner Auteur de l’article

    Dans ce cas il faut ajouter une vérification dans la fonction « sendMessage » pour afficher une erreur (et donc ne pas envoyer le mail) si la case n’est pas coché.

    Répondre
  3. polko

    Hello!

    Merci pour ce tuto très cohérent.
    -Je suis débutant dans l’utilisation de prestashop…
    -dans le site que je suis entrain de réaliser je veux ajouter un champ « numéro de téléphone » lors de la création du compte client.
    -J’ai suivi les différentes étapes décrites dans le tuto et même ce que benjamin à expliqué dans son commentaire mais toujours aucun changement dans mes différent formulaires.
    -j’ai peut être mal travaillé dans une des étapes du tuto.

    bien vouloir m’aider en m’indiquant où est ce quelle est la partie qui est modifié à la fin de l’application de ce tuto dans mon site….

    Répondre
    1. Hoberdon Axel

      Bonjour,

      Je voudrai savoir si il est possible d’imposer le format de caractère à l’utilisateur, mettre uniquement des 10 numéros pour le téléphone ?

      Merci de votre réponse

      Bien cordialement, Axel Hoberdon

      Répondre
  4. Laura Domingues

    Bonjour,
    Je trouve votre tutoriel très bien rédiger et je viens je pense de le réaliser avec succès. Une petite question, comment puis-je retrouver les numéros de téléphone qui du coup ne s’affiche pas par contre dans la partie « SAV » de Prestashop ?

    Répondre
    1. Stéphane Drouvin

      Bonjour j’ai exactement le meme pb que vous et j’ai beau tout retourner pas moyen de savoir !!!
      Si qqn a une idée elle est la bienvenue

      Répondre
  5. flouk

    bonjour, pouvez-vous me dire comment faire pour changer le mail de réception dans le formulaire contact svp, pour que les clients qui m’écrive sur contact je les reçois sur l’adresse modifié. j’espère que vous m’avait compris.
    prestashop 1.7

    merci

    Répondre
  6. Voyage-chirurgie-esthétique

    La champes pas enregistré et donc invisible dans le SAV backoffice, je suggère ceci comme dépannage :
    Ajouter ceci dans public function sendMessage()

    ………..
    ………..
    $message = « Tel :  » . trim(Tools::getValue(‘phone’)) .  » ——— Message :  » . trim(Tools::getValue(‘message’));
    ………..
    ………..

    Répondre

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.