- Team Ever - https://www.team-ever.com -

Ajoutez des hooks personnalisés à votre Prestashop

La gestion des hooks est très avenante sur Prestashop 1.6, et en-dehors de l’éditeur visuel qui permet de déplacer la position des modules selon l’emplacement où ils sont greffés, le back-office permet également de les réagencer de façon rapide et précise. Il peut en revanche arriver que l’on aie à ajouter un hook personnalisé sur son thème, pour une raison x ou y, comme par exemple pour afficher du contenu sur toutes les pages produit.

Il existe deux moyens d’effectuer cette opération, toutes demandant un ajout dans la base de données :

Vous pouvez également trouver un module de création de hooks sur notre boutique en cliquant ici.

1/ Ajout du hook dans la base de données :

Hook Prestashop

Dans la base de données de Prestashop se trouve une table nommée ps_hook (selon le préfixe que vous avez choisi de donner à vos tables). En images, cela ressemble à ceci :

Cette table liste tous les hooks disponibles sur votre Prestashop. Vous pouvez bien évidemment exporter la table au format Excel afin d’avoir une liste complète de vos hooks. Nous allons donc ajouter un hook à cette table. La requête à effectuer est la suivante :

INSERT INTO  `MaBaseDeDonnées`.`ps_hook` (
`id_hook` ,
`name` ,
`title` ,
`description` ,
`position` ,
`live_edit`
)
VALUES (
NULL ,  'DisplayMonHook',  'DisplayMonHook',  'Ma description de DisplayMonHook',  '1',  '1'
);

Avec ceci nous avons donc précisé le nom du hook, son titre, une petite description, une visibilité, et si l’on peut le gérer via live edit. Notez au passage que l’identifiant du hook est en auto-incrément, inutile donc de le renseigner.

Encore une fois, vous êtes entièrement responsable de votre base de données, pensez à sauvegarder votre site au préalable.

2/ Ajout d’un hook depuis un override

Afin d’ajouter un hook directement dans le Prestashop, et sans passer par un module, il va falloir overrider un controller front-office sur Prestashop. D’ordinaire, beaucoup effectuent un override du FrontController, mais selon vos besoins vous pouvez uniquement overrider le controller des produits, ou des catégories, etc. L’avantage du FrontController est qu’il vous laissera ajouter votre hook partout où vous le souhaitez, plutôt pratique. Le FrontController.php se trouve dans le dossier /classes/controllers/FrontController.php. Nous allons juste récupérer une partie du code, que nous modifierons, et que nous placerons proprement dans /override/classes/controllers. Le code à ajouter est tout simplement celui-ci :

< ?php
class FrontController extends FrontControllerCore

{

public function initContent()

{

  $this->process();

  if (!isset($this->context->cart))

   $this->context->cart = new Cart();

  $this->context->smarty->assign(array(

   'HOOK_HEADER' => Hook::exec('displayHeader'),

   'HOOK_TOP' => Hook::exec('displayTop'),

   'HOOK_MON_HOOK' => Hook::exec('DisplayMonHook'),

   'HOOK_LEFT_COLUMN' => ($this->display_column_left ? Hook::exec('displayLeftColumn') : ''),

   'HOOK_RIGHT_COLUMN' => ($this->display_column_right ? Hook::exec('displayRightColumn', array('cart' => $this->context->cart)) : ''),

  ));

}

}

?>

Vous avez ajouté votre hook et pouvez dès à présent le gérer depuis votre back-office ! Mais avant d’aller l’afficher sur votre site, nous allons voir dans le cadre d’un module comment l’ajouter sur une installation

3/ Affichage d’un hook depuis un module

Lorsque nous créons un module, nous avons la possibilité d’ajouter, de modifier ou d’altérer des tables dans la base de données. Nous pouvons également greffer le module dès l’installation, tout comme ajouter des exemples pré-remplis. Donc lors de l’exécution de la fonction install() du module, il faudra tout simplement ajouter la requête MySQL (en respectant bien évidemment les pré-requis de la class db()) et prévoir la fonction d’ajout au hook, que voici :

public function hookDisplayMonHook($params)
    {
		//smarty assign
    }

Et de cette manière votre module pourra se greffer sur votre hook personnalisé. C’est aussi simple que cela !

Nous avons listé les hooks pour Prestashop 1.7, ainsi que les hooks pour Prestashop 1.6, afin de vous aider à développer au mieux vos propres modules 🙂

4/ Afficher son hook en front-office

Le hook étant dans la base de données et utilisable, il va tout de même falloir l’ajouter sur le thème, afin de le rendre visible. Une bonne méthode est d’ores et déjà d’encapsuler votre hook dans une div, avec un identifiant ou une class bien précise. Ouvrez le fichier TPL de votre thème où vous souhaitez ajouter votre hook, et saississez tout bêtement ceci :

<div class="DisplayMonHook">
	{hook h="DisplayMonHook"}
</div>

Rendez-vous à présent dans votre front-office, et allez vider votre cache. Greffez-y un module qui puisse s’accrocher à ce nouveau hook, et le résultat devrait apparaitre sans problème ! Attention cependant, si vous souhaitez greffer un module existant à ce nouveau hook, il vous faudra overrider le module afin de lui ajouter la fonction de hook qui lui permettra de s’y ajouter. Sans cela, Prestashop vous dira tout simplement que « ce module ne peut pas être greffé à ce hook », et c’est bien normal…

Vous souhaitez ajouter des hooks à votre base de données sans vous embêter ?

Regardez par ici, un module d’ajout de hooks dans votre BDD est librement téléchargeable !