Architecture d’un module Prestashop
Un module Prestashop suit une structure précise. Respecter cette convention garantit la compatibilité avec les mises à jour et le marketplace.
mycustommodule/
├── mycustommodule.php # Fichier principal
├── config.xml # Configuration
├── controllers/
│ ├── admin/ # Controllers back-office
│ └── front/ # Controllers front-office
├── views/
│ └── templates/
│ ├── admin/ # Templates back-office
│ ├── front/ # Templates front-office
│ └── hook/ # Templates de hooks
├── classes/ # Classes métier
├── sql/ # Scripts SQL
└── translations/ # Traductions
Chez Lueur Externe, nous développons des modules Prestashop sur mesure en respectant scrupuleusement cette architecture.
Le système de hooks
Les hooks sont le mécanisme central d’extension de Prestashop. Il en existe deux types :
Hooks d’affichage (display)
Ils permettent d’injecter du contenu HTML dans le front-office :
public function hookDisplayHeader($params)
{
$this->context->controller->addCSS($this->_path . 'views/css/front.css');
$this->context->controller->addJS($this->_path . 'views/js/front.js');
}
public function hookDisplayProductAdditionalInfo($params)
{
$product = $params['product'];
$this->context->smarty->assign([
'custom_data' => $this->getCustomData($product['id_product']),
]);
return $this->display(__FILE__, 'views/templates/hook/product-info.tpl');
}
Hooks d’action
Ils réagissent aux événements du système :
public function hookActionProductUpdate($params)
{
$productId = (int) $params['id_product'];
// Synchroniser avec un ERP externe
$this->syncWithErp($productId);
}
public function hookActionOrderStatusPostUpdate($params)
{
$order = new Order($params['id_order']);
if ($params['newOrderStatus']->id == Configuration::get('PS_OS_SHIPPING')) {
$this->sendTrackingNotification($order);
}
}
Controllers personnalisés
Front controller
// controllers/front/display.php
class MyCustomModuleDisplayModuleFrontController extends ModuleFrontController
{
public function initContent()
{
parent::initContent();
$this->context->smarty->assign([
'items' => $this->module->getItems(),
]);
$this->setTemplate('module:mycustommodule/views/templates/front/display.tpl');
}
}
Admin controller
// controllers/admin/AdminMyCustomController.php
class AdminMyCustomController extends ModuleAdminController
{
public function __construct()
{
$this->table = 'my_custom_table';
$this->className = 'MyCustomClass';
$this->bootstrap = true;
parent::__construct();
}
}
Bonnes pratiques
- Toujours utiliser les méthodes
Db::getInstance()pour les requêtes SQL - Valider et échapper toutes les entrées utilisateur avec
pSQL()et(int) - Utiliser le système de traduction
$this->l('...') - Implémenter les méthodes
install()etuninstall()proprement - Tester sur Prestashop 1.7 et 8 pour la compatibilité
Conclusion
Le développement de modules Prestashop demande une connaissance approfondie de l’architecture de la plateforme. Lueur Externe développe des modules sur mesure, performants et maintenables pour ses clients e-commerce.