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 :
Normalement tout est bon !