Modules : l'ADN de PrestaShop
Cette section fait partie du cookbook PrestaShop. Pour le contexte global, voir la page principale.
Si PrestaShop était un château fort, les modules seraient ses chevaliers. Chacun a une mission précise, une armure spécifique, et sait exactement dans quelle salle du trône intervenir. Comprendre ce système, c'est comprendre pourquoi PrestaShop a survécu et prospéré pendant 18 ans.
Lecture : 15min Fondamental pour tout projet PS📜 Un peu d'histoire — L'évolution du système de modules
PrestaShop a construit son architecture de modules dès ses débuts, et l'a fait évoluer avec chaque version majeure :
| 🗓️ Version | 📋 Évolution clé des modules |
|---|---|
| PS 1.4 (2011) | Introduction du système de hooks — les modules s'accrochent à des points précis du cycle de vie de la boutique |
| PS 1.5 (2012) | Multi-boutique — un module peut s'activer boutique par boutique |
| PS 1.6 (2014) | Interface back-office repensée, marketplace Addons officialisée, +3 000 modules référencés |
| PS 1.7 (2016) | Introduction de Symfony et Webpack dans le core — les nouveaux modules peuvent hériter de l'architecture Symfony |
| PS 8 (2022) | Abandon de PHP 7, support PHP 8.1+, modernisation des services Symfony, hooks étendus |
| PS 9 (2024) | Architecture quasi full-Symfony, autowiring, Doctrine — les modules "modernes" sont de vrais bundles Symfony |
Un module développé pour PS 1.6 ne fonctionnera pas sur PS 9 sans refonte. Quand tu évalues un module sur la marketplace, regarde toujours la version PS minimale supportée — c'est le premier filtre à appliquer.
🏗️ Architecture d'un module — Le minimum vital
Un module PrestaShop dans sa forme la plus simple, c'est un dossier + 2 fichiers :
modules/
└── monmodule/
├── monmodule.php ← Le cerveau du module
└── config.xml ← Métadonnées (généré automatiquement)
Voici le squelette minimal d'un module fonctionnel :
<?php
// modules/monmodule/monmodule.php
// Sécurité : empêche l'accès direct au fichier
if (!defined('_PS_VERSION_')) {
exit;
}
class MonModule extends Module
{
public function __construct()
{
$this->name = 'monmodule'; // Identifiant unique (= nom du dossier)
$this->tab = 'front_office_features'; // Catégorie dans le back-office
$this->version = '1.0.0';
$this->author = 'Doing';
parent::__construct();
$this->displayName = $this->l('Mon Module'); // Nom affiché
$this->description = $this->l('Ce module fait quelque chose d\'utile.');
}
// Appelé lors de l'installation du module
public function install(): bool
{
return parent::install()
// On s'enregistre sur un hook : ici, le pied de page du front
&& $this->registerHook('displayFooter');
}
// Appelé lors de la désinstallation
public function uninstall(): bool
{
return parent::uninstall();
}
// La méthode qui sera exécutée quand le hook "displayFooter" se déclenche
public function hookDisplayFooter(array $params): string
{
// On passe des variables au template Twig/Smarty
$this->context->smarty->assign(['message' => 'Bonjour depuis MonModule !']);
// On retourne le rendu d'un template
return $this->display(__FILE__, 'views/templates/hook/footer.tpl');
}
}
Un hook est un point d'accroche dans le code de PrestaShop. Il en existe des centaines : displayHeader, displayFooter, actionOrderStatusUpdate, actionProductAdd…
Ton module déclare les hooks qui l'intéressent à l'installation, et PrestaShop l'appelle automatiquement au bon moment. Tu n'as jamais besoin de modifier le core — c'est là toute la magie.
🗂️ Les grandes familles de modules
| 🏷️ Famille | 💡 Exemples | 📋 À savoir |
|---|---|---|
| Paiement | Stripe, PayPal, Alma, Mollie | Modules officiels des prestataires — privilégier les modules certifiés PS |
| Livraison | Colissimo, Chronopost, Mondial Relay | Souvent fournis par les transporteurs eux-mêmes |
| Marketing | Brevo (ex-Sendinblue), Mailchimp, Google Shopping | Vérifier la fraîcheur des mises à jour |
| SEO | SEO Expert, Google Sitemap | Certains hooks SEO sont natifs — ne pas over-moduler |
| Analytics | Google Analytics 4, GTM, Matomo | GA4 a un module officiel Google |
| Marketplace | Shopping Feed, Lengow | Synchronisation multi-canaux — projets en soi |
| B2B | B2B Suite, Quick Order | Impact fort sur le tunnel — bien tester |
| Performance | Cache avancé, Image optimization | À activer progressivement avec monitoring |
| Sécurité | reCAPTCHA, 2FA back-office | Indispensables en production |
| Contenu | Blog, FAQ, Avis clients | Enrichissent l'expérience sans dev |
| Métier custom | 🔧 Développé par Doing | Répondent aux besoins spécifiques non couverts |
⚖️ Marketplace vs Dev custom — La grille de décision
Choisis un module marketplace si :
- ✅ Le besoin est standard (paiement, livraison, emailing)
- ✅ Le module a été mis à jour dans les 12 derniers mois
- ✅ Il supporte ta version de PrestaShop
- ✅ Il a plus de 100 installations et une note > 4/5
- ✅ L'éditeur répond aux questions sur le forum
Développe en custom si :
- 🔧 Le besoin est 100% métier (règles de pricing spécifiques, workflow interne)
- 🔧 Aucun module existant ne couvre le besoin à plus de 80%
- 🔧 La donnée traitée est sensible et tu ne veux pas dépendre d'un tiers
- 🔧 Le module existant nécessiterait autant de personnalisation que de le recoder
La marketplace PrestaShop Addons héberge des milliers de modules — dont beaucoup ne sont plus maintenus. Un module non mis à jour depuis 2+ ans sur une version PS récente, c'est :
- Un risque de sécurité (failles non patchées)
- Un risque de compatibilité (PHP 8+ ou PS 8/9 non supportés)
- Un risque métier (bug en prod sans éditeur pour le corriger)
Avant chaque achat, vérifie : date de dernière mise à jour, compatibilité PS, politique de support de l'éditeur. Et teste toujours sur un environnement de staging avant la production.
Tu sais désormais recruter, évaluer et commander les modules de ton royaume. Mais un empire marchand ne se bâtit pas seulement sur des rouages invisibles — il lui faut aussi des remparts à l'apparence noble et une façade digne de sa réputation.
L'heure est venue de confier les clés du chantier à tes maîtres bâtisseurs du front-end. Qu'ils sculptent les pierres de Twig et taillent les ornements de SCSS — sans pour autant miner les fondations du donjon. 🏗️
👉 En route vers les ateliers du thème : Theming : personnaliser l'apparence 🎨