Tutoriel - Ajouter un hook dans Prestashop v1.4

Pour modifier le template Prestashop, il faut ajouter ce qu'on appelerait une position dans Joomla, dans Prestashop il s'agit d'un hook.

Et, pour ajouter un hook, on doit passer par 3 étapes...qui sont en fait la modification du modèle, du contrôleur et de la vue...le tout pour modifier un élément "visuel"...amusant. :)

Je détaillerai vers la fin, au cas où, l'ajout de ce hook au module, mais comme nous le verrons, cela se fait comme pour tous les hooks existants.

1 - Ajout du hook dans la BDD

insérer dans la BDD un premier élément dans la table hook:

INSERT INTO `ps_hook` (`name`, `title`, `description`) VALUES ('displayCenterleftColumn', 'Centerleft column blocks', 'hook rapha pour les modules au centre à gauche');

2 - Ajout du hook dans le FrontController

Il faut modifier la fonction initContent() du fichier classes/controller/FrontController:

$this->context->smarty->assign(array( 'HOOK_HEADER' => Hook::exec('displayHeader'), 'HOOK_TOP' => Hook::exec('displayTop'), '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)) : ), ));

et ajouter la ligne suivante:

'HOOK_CENTERLEFT_COLUMN' => ($this->display_column_left ? Hook::exec('displayCenterleftColumn') :),;

ce qui donne:

$this->context->smarty->assign(array( 'HOOK_HEADER' => Hook::exec('displayHeader'), 'HOOK_TOP' => Hook::exec('displayTop'), 'HOOK_LEFT_COLUMN' => ($this->display_column_left ? Hook::exec('displayLeftColumn') : ), 'HOOK_CENTERLEFT_COLUMN' => ($this->display_column_left ? Hook::exec('displayCenterleftColumn') : ), 'HOOK_RIGHT_COLUMN' => ($this->display_column_right ? Hook::exec('displayRightColumn', array('cart' => $this->context->cart)) : ), ));

 

3 - Ajout du hook dans le theme

Il faut modifier le fichier header.tpl et ajouter où vous le sohaitez (plutôt entre deux divs):

{$HOOK_CENTERLEFT_COLUMN}

Remarque:

si on souhaite que ce hook n'apparaisse que sur certaines pages, par exemple: uniquement sur la page d'accueil, il suffit de faire:

{if $page_name == 'index'}{$HOOK_CENTERLEFT_COLUMN}

{/if}

 

4 - Le hook pour le module

Si l'on souhaite afficher un module à cette "position", ou à ce hook display, il faut ensuite effectuer comme pour tous les modules, en ajoutant une fonction hookCenterLeft.

public function hookCenterleftColumn($params) { //pour le cas où la fonction hookLeftColumn existait déjà et renvoyait le contenu du module return $this->hookLeftColumn($params); }

 

Commentaires 1

Super User

le mercredi 7 octobre 2015 17:05

Bonjour, ça date mais c'est encore utile ! Merci pour ce tuto. J'ai un PS 1.5 avec le module Gallery with FB button (version pour PS 1.4 mais fonctionnant très bien) que je souhaiterais insérer dans une de mes pages CMS.
A l'heure actuelle, il n'est pas dans une position mais le fichier gallery.php est directement appelé dans le menu.
J'ai essayé la méthode pour PS 1.5, mais je n'ai plus accès au module, il me dit qu'il y a une erreur de syntaxe dans le fichier gallery_module.php, et la page des positions est inatteignable (page blanche). De plus, pas de position nouvelle après avoir ajouté le code dans cms.tpl.
Donc je teste cette solution ci. J'ai ajouté le hook dans la bdd.
Mais ensuite ? C'est bien dans FrontController.php qu'il faut ajouter l'étape suivante, même si c'est dans une page CMS que je veux ajouter la commande ? Pour éviter un écrasement lors d'une mise à jour, je peux enregistrer le fichier modifier dans le dossier override ?
Ensuite, pour l'étape 3, je suppose que dans mon cas c'est le fichier cms.tpl que je dois modifier ?

Merci d'avance ! (c'est quand même vachement plus simple avec Joomla !!!!!)

Bonjour, ça date mais c'est encore utile ! Merci pour ce tuto. J'ai un PS 1.5 avec le module Gallery with FB button (version pour PS 1.4 mais fonctionnant très bien) que je souhaiterais insérer dans une de mes pages CMS. A l'heure actuelle, il n'est pas dans une position mais le fichier gallery.php est directement appelé dans le menu. J'ai essayé la méthode pour PS 1.5, mais je n'ai plus accès au module, il me dit qu'il y a une erreur de syntaxe dans le fichier gallery_module.php, et la page des positions est inatteignable (page blanche). De plus, pas de position nouvelle après avoir ajouté le code dans cms.tpl. Donc je teste cette solution ci. J'ai ajouté le hook dans la bdd. Mais ensuite ? C'est bien dans FrontController.php qu'il faut ajouter l'étape suivante, même si c'est dans une page CMS que je veux ajouter la commande ? Pour éviter un écrasement lors d'une mise à jour, je peux enregistrer le fichier modifier dans le dossier override ? Ensuite, pour l'étape 3, je suppose que dans mon cas c'est le fichier cms.tpl que je dois modifier ? Merci d'avance ! (c'est quand même vachement plus simple avec Joomla !!!!!)
Pas encore de commentaire
Already Registered? Login Here
Guest
jeudi 13 août 2020

Image Captcha

By accepting you will be accessing a service provided by a third-party external to https://www.pulsar-informatique.com/