Prestashop: Comment ajouter un nouvel HOOK

Prestashop propose un système de HOOK pour ajouter des modules sur votre boutique en ligne. Mais que faire lorsque l’on veut gréffer un module sur un emplacement personnalisé? Nous allons essayer de vous présenter le plus clairement possible les étapes permettant de positionner des modules sur d’autres emplacements que ceux qui sont définis par défaut.

Il y a plusieurs façons de le faire et nous vous avons réalisé un tutorial en allant au plus simple et a l’essentiel.

Un Hook, qui en français signifie crochet, permet de positionner les modules à l’emplacement de votre choix sur votre boutique. Nous allons vous présenter en 4 étapes comment créer de nouveaux emplacements.

Dans notre exemple, nous allons insérer un nouveau module sur la fiche produit.

1 : base de données

La première étape consiste à ajouter une entrée dans la base de données, avec les éléments du nouveaux Hook. Cette manipulation vous permettra depuis le backoffice de positionner votre module dans votre nouveau Hook. Connectez-vous à PhpMyAdmin et après avoir cliqué sur SQL, entrez le code suivant:

INSERT INTO ps_hook (id_hook,name,title,description,position)VALUES (NULL ,’nouveau’,’titre nouveau’ ,’description nouveau’ , ‘1’);

Votre backoffice a maintenant un nouveau choix de position qui se nome « nouveau ».

2 : Modification du header.php

La seconde étape consiste a indiquer a votre site qu’il y a une nouvelle possibilité de Hook. Ca se règle sur le fichier header.php, à la racine du site.

Vers la ligne 12, vous devez avoir:

$smarty->assign(array(
‘HOOK_HEADER’ => Module::hookExec(‘header’),
‘HOOK_LEFT_COLUMN’ => Module::hookExec(‘leftColumn’),
‘HOOK_TOP’ => Module::hookExec(‘top’),
‘HOOK_CENTER’ => Module::hookExec(‘center’),
‘static_token’ => Tools::getToken(false),
‘token’ => Tools::getToken(),
‘priceDisplayPrecision’ => _PS_PRICE_DISPLAY_PRECISION_,
‘content_only’ => intval(Tools::getValue(‘content_only’))
));

Ajoutez votre nouveau Hook dans la liste comme ceci:

$smarty->assign(array(
‘HOOK_NOUVEAU’ => Module::hookExec(‘nouveau’),
‘HOOK_HEADER’ => Module::hookExec(‘header’),
‘HOOK_LEFT_COLUMN’ => Module::hookExec(‘leftColumn’),
‘HOOK_TOP’ => Module::hookExec(‘top’),
‘HOOK_CENTER’ => Module::hookExec(‘center’),
‘static_token’ => Tools::getToken(false),
‘token’ => Tools::getToken(),
‘priceDisplayPrecision’ => _PS_PRICE_DISPLAY_PRECISION_,
‘content_only’ => intval(Tools::getValue(‘content_only’))
));

3 : Ajout du nouveau HOOK

L’étape suivante est la plus simple, à savoir positionner votre nouveau HOOK sur votre nouvelle template.
Dans notre exemple, nous souhaitons ajouter un module sur la page des produits. Nous allons donc éditer
product.tpl, dans le dossier de la template et ajouter ce bout de code à l’emplacement choisi:
{$HOOK_NOUVEAU}

Votre page est maintenant prête à afficher votre nouveau module.

Votre backoffice a maintenant un nouveau choix de position qui se nome « nouveau ».

4 :  Configuration du module

Reste le dernier point: la configuration du module.
Par défault, prestashop n’autorise pas l’utilisation des modules n’importe ou. Il faut modifier la source du module pour pouvoir le gréffer sur une page de son choix.

Solution la plus simple:

Si votre module n’est pas utilisé à un autre endroit, changer directement la function qui le positionne.
ex dans un module ou l’élément était censé se greffer à droite, vous pouvez voir dans la source:

function hookRightColumn($params)

Remplacer simplement cette fonction par:

function hookNouveau($params)

ET voila, il ne reste plus qu’a installer votre module.

Seconde solution:

Si votre module est utilisé sur différents emplacements, vous devez créer une nouvelle fonction, qui clone la fonction principale.
Ex:

function hookNouveau($params){

return $this->hookRightColumn($params);

}

Cette fonction a pour but de copier la fonction hookRightColumn dans hookNouveau.

Vous avez maintenant tous les éléments pour créer un nouvel Hook.

Une réflexion sur “ Prestashop: Comment ajouter un nouvel HOOK ”

  1. J’ai un soucis à la 1ère étape où j’obtiens un message d’erreur :
    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near  »titre nouveau’ ,’description nouveau’ , ’1′)’ at line 1

    J’utilise PS 1.5.4.1