Prestashop: comment surcharger le coeur

Logo PrestashopComme je le disai dans un précédent billet, depuis que Prestashop est sorti en version 1.4, la surcharge du coeur est désormais possible. Controllers et classes peuvent être réécrites sans avoir à hacker le coeur du logiciel !

C’est pour moi une des meilleures fonctionnalités techniques apportées par cette nouvelle version. En effet, vous allez pouvoir changer le comportement des fonctions du coeur de Prestashop et sans avoir à les réécrire à chaque changement de version de presta. C’était clairement une fonctonnalité manquante de Prestashop comparé à son principal concurrent qu’est Magento. Quand il s’agit de coder « proprement », la surcharge de classe est vraiment une bonne méthode.

Maintenant venons en au plus important, comment cela fonctionne-t’il dans prestashop 1.4 et comment le mettre en oeuvre ? Prenons un exemple concret et simple : rajouter un hook sur la page d’accueil (il n’y a que le HOOK_HOME de disponible dans le template de base) pour venir afficher des infos avec votre module.

La surcharge va venir s’opérer en créant un fichier IndexController.php dans override/controllers. Lorsque prestashop viendra charger le controller IndexController, il passera d’abord dans ce répertoire pour voir s’il n’existe pas déjà et le chargera le cas échéant. Voici le contenu de ce fichier :

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
class IndexController extends IndexControllerCore
{
    public function process()
    {
    parent::process();
 
    $this->smarty->assign('HOOK_HOME_SUPP', Module::hookExec('home'));
    }
}
 
?>

Ici il n’y a que la méthode process() qui nous intéresse mais on pourrait très bien refaire les méthodes de la classe dans leur intégralité.

On vient donc déclarer un nouveau hook HOOK_HOME_SUPP sur lequel nous pouvons maintenant venir nous accrocher depuis un module quelconque.

Il faut bien évidemment que votre module s’accroche sur le hook « home » pour que cela fonctionne.

Et voilà, votre surcharge de controller est faite ! Un seul fichier à créer et à positionner dans le bon répertoire (override/controllers) et le tour est joué !

La surcharge de classes fonctionne de la même manière en changeant le répertoire dans lequel vous mettez votre fichier : override/classes.

Techniquement, la surcharge s’effectue selon les étapes suivantes (tout se passe dans les fichier autoload.php et ControllerFactory.php):

  • Prestashop charge tout d’abord le fichier correspondant au controller que l’on souhaite  redéfinir (celui du coeur). Celui-ci se nome « nomDuControllerCore » donc ici : IndexControllerCore.php.
  • Puis il charge votre fichier de surcharge IndexController.php
  • enfin il fait un eval php de : « class IndexController extends indexControllerCore » ce qui a pour conséquence de surcharger la classe Core de base !

Une surcharge simple mais efficace !

Vous pouvez répondre, ou faire un trackback depuis votre propre site web.

3 Réponses sur “Prestashop: comment surcharger le coeur”

  1. […] hook dans un contrôleur pour y exécuter le code de votre choix, je vous conseil la lecture de cet article de Michel […]

  2. […] version 1.4 de Prestashop a quand même apporté une grande évolution avec son système d’override de classes mais si vous développez des modules, vous ne pourrez pas échapper à l’utilisation de […]

  3. […] Une fois ce champ en base ajouté, il faut surcharger la classe Manufacturer.php en suivant par exemple le tutoriel de surcharge du coeur de Prestashop. […]

Donner votre avis