💻 DéveloppementDébutant PS 1.6 PS 1.7 PS 8.x

Intégrer un widget externe dans votre thème PrestaShop

Guide complet pour intégrer un widget tiers (avis, chat, tracking) dans un thème PrestaShop via les fichiers TPL, hooks et bonnes pratiques.

En bref : Pour intégrer un widget externe dans PrestaShop, trois méthodes existent : l'édition directe des fichiers TPL du thème (rapide mais fragile), la création d'un module dédié avec hooks (pérenne et professionnel), ou l'utilisation du module HTML personnalisé (sans code). La méthode par module est recommandée pour sa résistance aux mises à jour et sa flexibilité.

Publié le 21 mars 2026 6 min de lecture Alexandre Carette

Intégrer un widget externe dans votre thème PrestaShop

L'intégration de widgets tiers — chat en ligne, avis clients, pixels de tracking, bandeau de cookies — est l'une des demandes les plus fréquentes en e-commerce. Sur PrestaShop, cette opération repose sur la modification des fichiers templates (.tpl en Smarty, ou .twig depuis PrestaShop 8.x pour le back-office) et sur la bonne compréhension du système de hooks.

Voici la méthode professionnelle pour intégrer proprement n'importe quel snippet externe sans compromettre la maintenabilité de votre boutique.

Comprendre l'architecture des templates PrestaShop

Avant de coller un script dans un fichier au hasard, il faut comprendre comment PrestaShop construit ses pages.

Chaque page visible par vos visiteurs est générée à partir de fichiers templates situés dans le dossier de votre thème :


/themes/votre-theme/
├── templates/
│   ├── layouts/
│   │   └── layout-both-columns.tpl   # Structure globale
│   ├── _partials/
│   │   ├── head.tpl                   # Balises <head>
│   │   ├── header.tpl                 # En-tête du site
│   │   └── footer.tpl                 # Pied de page
│   ├── index.tpl                      # Page d'accueil
│   ├── catalog/
│   │   └── product.tpl                # Fiche produit
│   └── checkout/
│       └── cart.tpl                   # Panier

Sur PrestaShop 1.6, la structure est légèrement différente : les fichiers se trouvent directement à la racine du dossier du thème (/themes/votre-theme/header.tpl, footer.tpl, etc.).

Quel fichier modifier selon le type de widget ?

Type de widgetFichier cibleEmplacement dans le HTML Pixel de tracking (Analytics, Meta)`head.tpl`Juste avant `` Chat en ligne (Crisp, Tawk.to)`footer.tpl`Juste avant `` Avis clients (Trustpilot, Avis Vérifiés)`product.tpl`Après la description produit Bandeau cookies (Axeptio, Tarteaucitron)`footer.tpl` ou `head.tpl`Selon la documentation du service Widget personnalisé (formulaire, carte)Template de la page concernéeÀ l'endroit souhaité

Méthode 1 : insertion directe dans le template (rapide)

Cette méthode convient pour un widget simple qui doit apparaître sur toutes les pages.

Étape 1 : accéder aux fichiers du thème

Connectez-vous à votre serveur via FTP (FileZilla, WinSCP) ou via le gestionnaire de fichiers de votre hébergeur. Naviguez jusqu'au dossier de votre thème actif.

Cas particulier — PrestaShop Cloud : si vous utilisez l'offre cloud de PrestaShop, l'accès FTP est restreint. Vérifiez dans votre tableau de bord cloud si un accès SFTP est proposé, ou utilisez le module "HTML personnalisé" comme alternative.

Étape 2 : identifier le bon fichier

Pour un widget de type chat ou script global, ouvrez footer.tpl (PrestaShop 1.7/8.x : themes/votre-theme/templates/_partials/footer.tpl).

Étape 3 : coller le snippet

Insérez le code JavaScript fourni par le service tiers juste avant la balise de fermeture :


{* Widget chat - Ajouté le JJ/MM/AAAA *}
<script>
  // Coller ici le snippet fourni par le service
  (function() {
    var s = document.createElement('script');
    s.src = 'https://widget.example.com/loader.js';
    s.async = true;
    document.head.appendChild(s);
  })();
</script>

Conseil : ajoutez toujours un commentaire Smarty {* ... *} indiquant la date et l'objet du widget. Vous vous remercierez dans six mois.

Méthode 2 : utiliser les hooks PrestaShop (recommandée)

L'insertion directe fonctionne, mais elle a un défaut majeur : lors d'une mise à jour du thème, vos modifications sont écrasées. La méthode professionnelle consiste à utiliser le système de hooks via un module.

Créer un micro-module d'intégration

Créez un module dédié qui injecte votre widget via un hook. Voici un squelette fonctionnel :


<?php
/**
 * Module d'intégration de widget externe
 */
class MyWidgetIntegration extends Module
{
    public function __construct()
    {
        $this->name = 'mywidgetintegration';
        $this->version = '1.0.0';
        $this->author = 'Votre nom';
        $this->tab = 'front_office_features';
        $this->need_instance = 0;
        $this->bootstrap = true;

        parent::__construct();

        $this->displayName = $this->l('Mon Widget');
        $this->description = $this->l('Intègre le widget XYZ sur la boutique.');
    }

    public function install()
    {
        return parent::install()
            && $this->registerHook('displayFooterBefore')
            && $this->registerHook('displayHeader');
    }

    /**
     * Injection dans le <head> (CSS, meta)
     */
    public function hookDisplayHeader()
    {
        // Charger un CSS si nécessaire
        $this->context->controller->addCSS($this->_path . 'views/css/widget.css');
    }

    /**
     * Injection avant le footer (widget visible)
     */
    public function hookDisplayFooterBefore()
    {
        return $this->display(__FILE__, 'views/templates/hook/widget.tpl');
    }
}

Hooks les plus utiles pour les widgets

HookPositionUsage typique `displayHeader```Scripts de tracking, CSS `displayTop`Haut de pageBandeau promotionnel `displayFooterBefore`Avant le footerChat, widgets flottants `displayFooter`Dans le footerLiens, badges de confiance `displayProductAdditionalInfo`Fiche produitAvis, badges `displayAfterBodyOpeningTag`Après ``Tag managers

Avantages de la méthode par module

  • **Résistant aux mises à jour** : le module survit à un changement de thème
  • **Activable/désactivable** : un clic dans le back-office suffit
  • **Configurable** : ajoutez une page de configuration pour stocker la clé API du widget
  • **Réutilisable** : transférable sur d'autres boutiques

Méthode 3 : le module "HTML personnalisé" (sans code)

Si vous n'êtes pas à l'aise avec le code, PrestaShop propose nativement le module "Bloc de texte personnalisé" (ou équivalent selon la version). Il permet d'injecter du HTML/JavaScript dans un hook sans toucher aux fichiers.

  1. Allez dans **Modules > Module Manager**
  2. Recherchez "HTML" ou "Texte personnalisé"
  3. Configurez le module en collant votre snippet
  4. Choisissez le hook de destination (footer, header, etc.)
  5. Cette méthode est limitée mais suffisante pour un pixel de tracking ou un widget simple.

    Bonnes pratiques pour l'intégration de widgets

    Performance : chargement asynchrone obligatoire

    Un widget externe mal intégré peut ralentir votre boutique de plusieurs secondes. Assurez-vous que le script est chargé en asynchrone :

    
    <!-- ✅ Bon : chargement asynchrone -->
    <script src="https://widget.example.com/loader.js" async defer></script>
    
    <!-- ❌ Mauvais : bloque le rendu de la page -->
    <script src="https://widget.example.com/loader.js"></script>
    

    RGPD : conditionner le chargement au consentement

    Depuis le RGPD, tout widget qui dépose des cookies (analytics, chat, réseaux sociaux) doit être conditionné au consentement de l'utilisateur. Utilisez un gestionnaire de consentement comme Tarteaucitron ou Axeptio :

    
    // Exemple avec Tarteaucitron
    tarteaucitron.services.monWidget = {
        key: 'monWidget',
        type: 'support',
        name: 'Mon Widget',
        needConsent: true,
        cookies: ['_widget_session'],
        js: function () {
            // Code de chargement du widget
        }
    };
    

    Thème enfant : protéger vos modifications

    Si vous optez pour la méthode 1 (modification directe des TPL), travaillez impérativement dans un thème enfant pour que vos modifications survivent aux mises à jour :

    
    # config/theme.yml du thème enfant
    parent: classic
    name: mon-theme-enfant
    display_name: Mon Thème Personnalisé
    version: 1.0.0
    

    Déboguer un widget qui ne s'affiche pas

    Si votre widget reste invisible après intégration, vérifiez ces points dans l'ordre :

    1. **Console du navigateur** (F12) : erreurs JavaScript ? Ressource bloquée par CORS ?
    2. **Cache PrestaShop** : videz le cache dans **Paramètres avancés > Performances**
    3. **Cache Smarty** : désactivez la compilation forcée pendant le développement
    4. **Content Security Policy** : votre serveur bloque-t-il les scripts externes via les en-têtes CSP ?
    5. **Position du hook** : vérifiez dans **Design > Positions** que votre module est bien greffé sur le bon hook
    6. 
      # Vider le cache manuellement si le back-office est inaccessible
      rm -rf var/cache/prod/*
      rm -rf var/cache/dev/*
      

      Résumé : quelle méthode choisir ?

      CritèreTPL directModule dédiéHTML personnalisé Rapidité de mise en place⭐⭐⭐⭐⭐⭐⭐ Résistance aux mises à jour⭐⭐⭐⭐⭐⭐ Flexibilité⭐⭐⭐⭐⭐⭐ Niveau technique requisMoyenÉlevéFaible

      Pour une intégration pérenne et professionnelle, la méthode par module reste la référence. Pour un besoin ponctuel ou un test rapide, l'édition directe du TPL dans un thème enfant fait parfaitement l'affaire.

#widget #tpl #theme #smarty #hooks #integration

Questions fréquentes

Tout ce que vous devez savoir sur ce sujet.

Un projet PrestaShop ?

Discutons-en directement.

★★★★★

193 projets livrés

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

Alexandre Carette

Expert PrestaShop & Architecture E-commerce

Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.