Prestashop s’est rapidement imposé dans le monde des CMS destinés au commerce digital. C’est même devenu la référence du domaine grace à une interface simple, intuitive et modulaire qui s’adapte toujours au plus près des besoins de ses utilisateurs. Pouvant compter également sur une large communauté de développeurs passionnée partout dans le monde, il offre l’assurance d’une solution viable, alliant agilité et sécurité. Au sein de la myriade de fonctions proposées, le Hook Prestahop est une des plus remarquables.

Qu’est-ce qu’un hook Prestahop ?

Les hooks viennent appuyer le travail de l’utilisateur au niveau de l’affichage du contenu, mais aussi sur le déroulement des processus et appels de fonctions liées au cycle de vie du site commerçant. Ils permettent de mettre en place une gestion événementielle et d’améliorer l’organisation et l’affichage des différents modules.

Les Hooks d’affichage

Ces ancres permettent avant tout de simplifier le développement front-end en s’attaquant à la gestion du placement des modules sur les pages finales. Le Hook d’affichage permet ainsi en quelques lignes d’éviter une complexification du code exponentielle. Une trop grande quantité de code natif entraîne en effet rapidement une difficulté de relecture, qui peut vite déboucher sur la perte de contrôle de l’ensemble des sources, transformant toute opération de maintenance en défis exploratoires.

Les Hooks d’événements

Il existe également le Hook d’action qui permet d’automatiser en continu la plupart des processus nécessaires au fonctionnement du commerce en ligne. Ce système de programmation événementielle permet par exemple de d’optimiser le traitement d’une commande client en en déclenchant la mise en préparation dès réception du paiement, ou bien encore de supprimer les données de la base de donnée dès la validation d’une désinscription.

En permettant de déclencher ainsi les appels aux procédures de gestion à la volée, c’est toute la chaîne de valeur logistique qui s’accélère considérablement, en diminuant les coûts de l’exploitation et de la maintenance. On s’émancipe enfin des routines nocturnes, ces lourdes mises à jour de données, obligeant à la mise en indisponibilité régulière des sites marchands, par souci légitime de l’intégrité data. L’activité du commerce a repris le pouvoir sur les outils informatiques, qui se conjuguent désormais au présent. Pour les clients, les fournisseurs ou les marchands, tous les flux se traitent en temps réel.

Comment créer un hook Prestashop 1.7 et bien l’utiliser

Nativement, dès l’installation de Prestashop 1.7, des hooks visuels sont déjà implémentés au sein du thème de base. Voici la liste des hooks Prestashop natifs :

  • header
  • top
  • leftcolumn
  • rightcolumn
  • home
  • footer

Tout module Prestahop peut donc s’accrocher à chacun de ces Hooks de vue natifs. Pour cela, il suffit d’ajouter dans la classe du module la définition d’une méthode publique prenant pour nom celui du Hook que l’on souhaite utiliser, précédé du mot-clef “Hook”. L’unique argument de cette méthode est un tableau qui comprendra l’ensemble des variables de contexte nécessaires à la bonne exécution :

public function hookNOMDUHOOK($params){}

Il ne reste ensuite qu’à ajouter au sein de la méthode d’installation du module un appel à la fonction d’enregistrement registerHook issue de la classe Hook avec en argument le nom du Hook en chaîne de caractères :

public function install(){ 

[...]

return::parent::install() && $this->registerHook('NOMDUHOOK');

[...] }

L’appel durant le cycle de vie de l’application se fait en deux temps. En fait, la définition des éléments de contexte nécessaires se fait à l’occasion de la première utilisation du Hook Prestashop 1.7 en définissant la méthode directe :

$params = array(

'parametre1' => 'valeur1', 

'parametre2' => 'valeur2' 

[...] // le nombre de paramètres n'est pas limité 

);

Module::hookExec('NomDuHook', $params);

Pour rendre simple l’utilisation du hook, il faut en simplifier l’appel, pour permettre d’obtenir un code lisible, et une meilleure maîtrise de son contenu. A cette fin, il faut ajouter au sein de la classe HookCore un raccourci, transformant l’appel de la méthode directe en une fonction simple :

class HookCore extends ObjectModel

{ [...]

static public function NomDuHook($tableauContexte)

{

$params = array('tableauContexte' => $tableauContexte);

return Module::hookExec('NomDuHook', $params);

}

// ...

}

L’appel au Hook créé se fait donc tout simplement :

 HookCore::NomDuHook(new Product( [...] ) );

La programmation événementielle devient plus facile avec ce type d’appels épurés et compréhensibles.

Créer de nouveaux hooks Prestashop entièrement personnalisés

Il est probable que très vite, les sept Hooks d’origine ne seront pas assez nombreux pour satisfaire tous les besoins et expérimentations de ces formidables outils. Il n’est en effet pas possible de créer de nouvelles ancres par l’interface graphique de Prestashop 1.7.

Cependant, si les définitions des méthodes d’appel paraissent un processus incroyablement simple, après l’avoir expérimenté et compris, l’ajout d’autres Hooks personnalisés l’est au moins dix fois davantage. Le processus ne demande en fait qu’une seule instruction à envoyer sur la base de donnée.

L’ajout consiste tout simplement à ajouter à la table ps_hook la ligne d’enregistrement du Hook en mettant son nom, son titre et sa description, soit la requête suivante :

INSERT INTO `ps_hook` (`name`, `title`, `description`) 

VALUES ('NomDuHook', 'Nom de mon Hook', 'Description du Hook');

Pour conclure sur la création de hook Prestahop 1.7

Utiliser le système de Hook Prestashop 1.7 est facile et permet de gagner un temps considérable sur l’ensemble des tâches, depuis le développement et la maintenance du code, jusqu’au traitement en direct des données en interfaçant directement avec les événements liés à la vie du site marchand. C’est un moyen malin d’accroître son activité, gagner en agilité d’action, mais aussi en liberté.

Grégory Chartier
Publié par Grégory Chartier

Expert Prestashop