Aller au contenu principal

Modules : l'ADN de PrestaShop

remarque

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
🏰 Ce que ça change pour toi

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');
}
}
💡 Le concept clé : les Hooks

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
PaiementStripe, PayPal, Alma, MollieModules officiels des prestataires — privilégier les modules certifiés PS
LivraisonColissimo, Chronopost, Mondial RelaySouvent fournis par les transporteurs eux-mêmes
MarketingBrevo (ex-Sendinblue), Mailchimp, Google ShoppingVérifier la fraîcheur des mises à jour
SEOSEO Expert, Google SitemapCertains hooks SEO sont natifs — ne pas over-moduler
AnalyticsGoogle Analytics 4, GTM, MatomoGA4 a un module officiel Google
MarketplaceShopping Feed, LengowSynchronisation multi-canaux — projets en soi
B2BB2B Suite, Quick OrderImpact fort sur le tunnel — bien tester
PerformanceCache avancé, Image optimizationÀ activer progressivement avec monitoring
SécuritéreCAPTCHA, 2FA back-officeIndispensables en production
ContenuBlog, FAQ, Avis clientsEnrichissent l'expérience sans dev
Métier custom🔧 Développé par DoingRé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
⚠️ Les modules abandonnés — La menace silencieuse

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.

🏰 Tes chevaliers-modules sont en ordre de bataille, sire !

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 🎨