Bienvenue sur le blog de l'agence Soluka !

Retrouvez des articles dédiés aux nouveautés dans le développement web, rédigés par des passionnés, ainsi que les dernières actualités de l'agence.

Recherche

Articles populaires

Jeux Phaser

29/09/14

Créer un nouveau hook PrestaShop

par Aymeric le 29 septembre 2014
R&D
Image Créer un nouveau hook PrestaShop

Avec le CMS PrestaShop, chaque module doit être fixé dans un point d’accroche, appelé hook. Il existe deux types de hook : les visibles et les invisibles. Par exemple, le hook actionCustomerAccountAdd est de type invisible car il se déclenche sur une action ; lorsqu’un compte client est créé avec succès. A l’inverse, le hook leftColumn est de type visible. C’est dans ce hook que sont accrochés les modules en colonne de gauche.

Lorsque l’on travaille sur un thème PrestaShop, il arrive d’avoir besoin de fixer un module à une position spécifique dans le cadre de son thème. Il est donc parfois nécessaire de créer un nouveau hook. Depuis la version 1.5 de PrestaShop, la création d’un hook est simplifiée. Dorénavant, plus besoin de se rendre dans la base de données, il suffit de suivre la méthode décrite ci-dessous :

1 / Modification du module

Pour l’exemple, nous simulerons vouloir accrocher le module blocknewsletter au hook que nous appellerons testSoluka. En effet, nous voulons pouvoir afficher ce module à un endroit précis de notre template. Pour ce faire, il faut commencer par modifier le fichier /blocknewsletter/blocknewsletter.php

Il faut modifier, comme ci-dessous, la fonction install() pour que le module se fixe dès son installation, dans notre nouveau hook.

public function install() {
		if (parent::install() == false || $this->registerHook(' testSoluka ')
}
blocknewsletter/blocknewsletter.php

Ensuite on crée la fonction qui sera appelée par notre nouveau hook.

public function hookTestSoluka ($params) {
	return $this->display(__FILE__, 'blocknewsletter.tpl');
}
blocknewsletter/blocknewsletter.php

Suite à ces modifications et afin qu’elles soient prises en compte, il est impératif de réinitialiser le module depuis le back-office de la boutique. Une fois cette action réalisée, notre module est accroché dans notre nouveau hook.

1 / Modification du template

On peut maintenant modifier le ou les fichiers template de son choix, et appeler le hook que nous venons de créer. Par exemple, si l’on souhaite faire apparaître notre nouveau hook dans le fichier index.tpl, il suffit d’insérer la ligne suivante :

{hook h=testSoluka}
index.tpl
  • waterproof

    Bonjour et merci pour ce tuto que j’essaie de suivre…

    Je souhaite accrocher le module Gallery with FB button dans une page CMS.

    Je vais appeler le hook galleryCMS.

    Dans modules>gallery_module.php, il n’y a qu’un hook déjà paramétré, c’est leftColumn. Ensuite tout le code pour la création des tables.
    J’ai donc ajouté

    function install() {

    if (parent::install() == false OR $this->registerHook(‘galleryCMS’) == false) }

    juste après le premier function install. Mais comme j’ai une erreur, je l’ai mis juste après le code concernant la bdd et juste avant return true.

    Ensuite, à la fin du fichier, avant le dernier ?> j’ai rajouté

    function hookgalleryCMS($params)

    {return $this->display(__FILE__, ‘gallery.tpl’);

    }

    Dans cms.tpl, j’ai ajouté

    {hook h=’galleryCMS’}

    Le hic, c’est que quand je retourne dans le backend, j’ai 2 erreurs :

    Le(s) module(s) suivant(s) ne peuvent pas être chargé.:

    gallery_module (erreur de syntaxe dans /modules/gallery_module/gallery_module.php)

    gallery_module (classe manquante dans /modules/gallery_module/gallery_module.php).

    Ce serait hyper sympa si vous vouliez bien me donner un p’tit coup de main !

    Merci d’avance !!

  • zeze

    Bonjour,

    Je souhaite accrocher 3 blocs CMS sur ma page d’accueil, entre mon menu horizontal et la liste de mes produits « populaires ».

    Pourriez vous me préciser à quel endroit de mon fichier blockcms.php je dois insérer les 2 codes :

    public function install() {
    if (parent::install() == false || $this->registerHook(‘ testSoluka ‘)
    }

    et

    public function hookTestSoluka ($params) {
    return $this->display(__FILE__, ‘blockcms.tpl’);
    }

    Merci pour votre aide e

    • AAymeric

      Bonjour,

      Dans le fichier blockcms.php, une fonction install() est déjà présente. Il suffit de rajouter le contenu ci-après dans la condition, à la suite des autres.

      || !$this->registerHook(‘ testSoluka ‘)

      Vous pouvez rajouter la fonction hookTestSoluka() à la suite des autres fonction préfixé par hook. Comme l’exemple ci-dessous.

      public function hookLeftColumn()
      {

      }
      public function hookRightColumn()
      {

      }
      public function hookTestSoluka($params)
      {

      }

      Si vous rencontrez des difficultés, n’hésitez pas à nous contacter.

      • zeze

        Merci pour votre réponse, je vais essayer durant le week end !!

      • zeze

        Bonjour,

        Sur mon BO, j’obtiens j’ai une page blanche avec cette erreur « [PrestaShop] Fatal error in module blockcms:syntax error, unexpected T_PUBLIC »

        et en FrontOffice, j’ai une page blanche ?

        auriez vous une petite idée d’où vient le problème ?
        Par avance merci

      • AAymeric

        Bonjour,

        Il y a une erreur de syntax dans le code source de la page blockcms.php
        C’est une erreur courante.
        Vous pouvez nous envoyer le fichier par mail et nous regarderons d’où vient le problème.

        Bonne journée.