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.