Surcharge et override
Cet article a été écrit par Julien Breux, et publié sur le blog de PrestaShop le 9 août 2011.
Introduction
PrestaShop vous permet de surcharger différents éléments et comportements. Il existe en réalité deux grands principes dans la version 1.4 de PrestaShop :
Le premier consiste à surcharger les éléments de vue des modules (Templates, JavaScript et feuilles de styles) afin que les thèmes puissent s'adapter au mieux à ceux-ci.
Le second principe consiste quant à lui à surcharger les comportements métiers (fichiers classes et fichiers contrôleurs) afin de ne cibler qu'une partie des éléments désirés.
Surcharge des modules
Les modules sont généralement constitués de cette façon :
/modules/mon_module/mon_module.tpl
/modules/mon_module/mon_module.css
/modules/mon_module/mon_module.js
PrestaShop vous permet de « surcharger », autrement dit de remplacer certains fichiers de vue des modules par de nouveaux situés dans le thème. Pour cela, rien de plus simple, il vous suffit de procéder de la manière suivante :
/themes/prestashop/modules/mon_module/mon_module.tpl
/themes/prestashop/css/modules/mon_modules/mon_module.css
/themes/prestashop/js/modules/mon_modules/mon_module.js
Ainsi, lorsque vous allez afficher votre site, ces nouveaux fichiers seront utilisés.
Surcharge des classes
L'override est un concept qui permet de "surcharger" les fichiers classes et les fichiers contrôleurs. L'utilisation ingénieuse de l'auto-chargement des classes de PrestaShop permet donc un "switch" assez facile de ces différents fichiers. Il vous est donc possible grâce à l'héritage de modifier ou ajouter de nouveaux comportements via les propriétés et les méthodes de ces différentes classes.
En temps normal, ceux-ci sont architecturés de cette façon (exemple pour la partie produit) :
/classes/Product.php Cette classe se nommera "ProductCore"
/controllers/ProductController.php Ce contrôleur se nommera "ProductControllerCore"
Afin de "surcharger" la classe modèle produit, vous devez créer un fichier situé dans le dossier "override/classes/" comme ceci :
/override/classes/Product.php
Cette classe se nommera "Product" et étendra la classe "ProductCore". Ainsi, la magie de PrestaShop peut opérer !
De la même façon, vous pouvez utiliser ce principe avec les contrôleurs et donc "surcharger" de cette façon :
/override/controllers/ProductController.php
Cette classe se nommera "ProductController" et étendra la classe "ProductControllerCore".
PrestaShop met à votre disposition certains fichiers vous permettant de mettre en œuvre quelques overrides comme l'affichage des redirections (_Tools.php), le calcul du temps d'exécution des "hooks" (_Module.php), etc...
Exemple 1
Lorsque l'on essaye de taper dans une base de données différente de celle de Presta, sur le même serveur MySQL, c'est simplement impossible avec la classe MySQL.php de base (et oui !).
La solution : utiliser cette surcharge de la classe MySQLCore :
Pour l'utiliser, il suffit juste d'instancier la classe de la manière suivante :
Pour une connexion locale : new MySQL(DB_SERVER, DB_USER, DB_PASSWD, 'le_nom_de_la_bdd', true);
Pour une connexion distante : new MySQL($ip_or_server, $user, $pass, $dbname, true);
Le dernier paramètre force la création d'une nouvelle connexion MySQL.
Exemple 2
Cette surcharge vous permet d’utiliser ajax-tab.php pour toute action d’administration.
A utiliser pour les taches cron par exemple.
Exemple 3
Créer une tache cron pour faire une sauvegarde périodique de la base de données. Merci de faire un test avant utilisation !
Exemple 4
Avec cette surcharge, vous avez une nouvelle variable Smarty « currentController » disponible dans header.tpl Ceci vous permet d’utiliser un header différent selon que vous soyez sur une page produit, une page catégorie ou sur la home.
Conclusions
Avec la surcharge, les fichiers « core » ne sont pas modifiés. Cette technique vous permet donc de personnaliser votre boutique PrestaShop tout en ayant la possibilité de suivre l'évolution du logiciel. Les mises à jour en sont facilitées
Last updated