Tutoriel

Modifier le formulaire de contact de Prestashop

Le formulaire de contact de PrestaShop est un outil indispensable pour communiquer avec vos clients. Par défaut, il ne contient qu’un champ e-mail et un message. Si vous souhaitez permettre à vos clients de laisser un numéro de téléphone, il est possible de le faire proprement à l’aide d’une surcharge du module contactform. Ce guide explique comment procéder, y compris pour les thèmes modernes comme Hummingbird.

1. Comprendre la structure du module contactform

Depuis PrestaShop 8, le module contactform fonctionne comme un widget. Il ne possède plus de contrôleur FrontOffice et le template se trouve désormais ici :

  • /modules/contactform/contactform.php — logique principale du module
  • /modules/contactform/views/templates/widget/contactform.tpl — affichage du formulaire

Dans le thème Hummingbird, le module est déjà surchargé via le fichier :

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

C’est ce fichier qu’il faut adapter pour y intégrer le champ “Numéro de téléphone”. Vérifiez donc toujours si ce fichier est déjà présent votre thème. A défaut, copiez-le à partir du dossier du module.

2. Pourquoi passer par une surcharge

Modifier directement le code du module n’est pas recommandé : une simple mise à jour le réinitialiserait. La bonne pratique consiste à créer une surcharge PHP qui valide le nouveau champ et à adapter le template du thème. Cette méthode assure une compatibilité totale avec les futures mises à jour de PrestaShop.

3. Créer la surcharge du module

Créez le fichier suivant :

/override/modules/contactform/contactform.php

Ajoutez le code suivant :

/override/modules/contactform/contactform.php
<?php

class ContactformOverride extends Contactform
{
    public function sendMessage()
    {
        $phone = Tools::getValue('phone', '');

        // Optionnel : on n’affiche une erreur que si le champ est rempli mais invalide
        if ($phone !== '' && !preg_match('/^[0-9\+\.\-\s]{6,20}$/', $phone)) {
            $this->context->controller->errors[] = $this->trans(
                'Le numéro de téléphone n’est pas valide.',
                [],
                'Modules.Contactform.Shop'
            );
        }

        // Si OK, on injecte le téléphone au début du message
        if ($phone !== '' && empty($this->context->controller->errors)) {
            $msg = (string) Tools::getValue('message', '');
            $_POST['message'] = "Téléphone : {$phone}\n\n" . $msg;
        }

        return parent::sendMessage();
    }

    public function getWidgetVariables($hookName = null, array $configuration = [])
    {
        $vars = parent::getWidgetVariables($hookName, $configuration);
        $vars['contact'] = array_merge($vars['contact'] ?? [], [
            'phone' => Tools::getValue('phone', ''),
        ]);
        return $vars;
    }
}

Cette surcharge vérifie le champ “numéro de téléphone” et l’injecte dans les variables Smarty utilisées par le template.

Notez par ailleurs que cette technique permet de s'affranchir des modifications des modèles de mail car le nouveau champ est injecté dans le champ "Message".

4. Adapter le template du thème Hummingbird

Le thème Hummingbird utilise un template déjà modernisé. Il faut donc insérer le champ dans la structure Bootstrap :

  1. Copiez le fichier :

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

dans votre thème enfant ou sauvegardez-le avant modification.

Ajoutez ensuite ce bloc juste après le champ “Email address” :

/themes/hummingbird/modules/contactform/views/templates/widget/contactform.tpl
{* Champ Numéro de téléphone *}
<div class="mb-3">
  <label class="form-label">{l s='Phone number' d='Shop.Forms.Labels'}</label>
  <input
		  class="form-control"
		  name="phone"
		  type="text"
		  value="{$contact.phone|default:''|escape:'htmlall':'UTF-8'}"
		  placeholder="{l s='Enter your phone number' d='Shop.Forms.Help'}"
  >
  <span class="form-text">
	{l s='optional' d='Shop.Forms.Help'}
  </span>
</div>

Ce champ s’affichera parfaitement dans le style Hummingbird, entre l’adresse e-mail et la référence de commande.

6. Vider le cache et régénérer les surcharges

  1. Allez dans Paramètres avancés → Performances.
  2. Cliquez sur “Vider le cache”.

Rechargez ensuite la page “Contactez-nous” pour vérifier que le champ s’affiche correctement.

7. Tester le fonctionnement

Essayez d’envoyer le formulaire sans numéro de téléphone pour tester la validation. Vous devriez voir s’afficher le message d’erreur prévu. Le champ est maintenant pris en compte dans la logique du formulaire et dans les variables Smarty.

8. Bonnes pratiques

  • Travaillez toujours sur un environnement de préproduction.
  • Ne surchargez que les fonctions nécessaires.
  • Sauvegardez vos fichiers avant mise à jour.
  • Testez sur mobile pour vérifier l’ergonomie du champ.

Conclusion

Grâce à cette méthode, vous pouvez ajouter un champ “Numéro de téléphone” au formulaire de contact PrestaShop même sur les thèmes modernes comme Hummingbird. L’ajout via une surcharge garantit la compatibilité avec les futures mises à jour tout en conservant un code propre, maintenable et visuellement intégré au thème.

Pour aller plus loin

🚀 Vous voulez aller plus loin techniquement ? Nos formations avancées PrestaShop vous donnent les clés pour développer des boutiques performantes.

Besoin d’un hébergement vraiment pensé pour PrestaShop ?

Nous travaillons avec 772424 — la référence française de l’hébergement e-commerce spécialisé, avec déjà +1200 boutiques PrestaShop accompagnées.

Besoin d'un expert ?

Bloqué à cette étape ? Faites appel à un expert certifié PrestaShop et avancez sereinement.

Chargement...