Jump to content

Les hooks "Pour les nuls"


Recommended Posts

Parce que j'ai vu plusieurs fois passer la question , et au risque de double emploi, voici une tentative sans prétention de vulgarisation des hooks prestashop pour les développeurs php qui rejoignent la communauté des développeurs prestashop.
Je demande votre indulgence...

Un hook dans prestashop, du mot anglais "crochet", mais traduisez plutôt "détour", est la base de tous vos futurs développement.

Concrètement, un hook est un emplacement dans le code de prestashop qui exécute du code source externe, et pourquoi pas le votre.

Si votre module a soucrit à ce hook et implémente la fonction associée, vous avez alors l'assurance qu'au moment précis ou le hook est appelé, votre code sera également exécuté.

Au niveau technique, cette souscription se fait au moment de l'installation de votre module (plein de tutos existent là dessus), par une instruction du type :

   public function install()
   {
       if
       (
           parent::install() == false
           OR $this->registerHook('nomDuHook') == false
       )
           return false;
       return true;
   }



l'éxecution de l'instruction

$this->registerHook('nomDuHook')



se traduit par l'ajout dans la base de données de la souscription du module ($this est relatif à votre module).

Précisément, un enregistrement est ajouté à la table (ps_)hook_module faisant correspondre l'id de votre module et celui du hook.

Un module peut soucrire à un nombre "illimité" de hooks.

Un hook peut exécuter un nombre "illimité" d'implémentations.

Lorsque plusieurs modules souscrivent à un hook, chaque implémentation (voir ci-dessous) est exécutée selon l'ordre croissant de priorité du module.


Un fois que vous avez souscrit à un hook , il faut en implémenter la fonction :

Supposons que vous vouliez exécuter du code en front office sur la page d'accueil (hook home)

dans votre install vous aurez

$this->registerHook('home')



Mais pour que tout soit parfait , vous devez implémenter la fonction "hookNomDuHook"

soit ici, pour la page d'accueil :

function hookHome($params)
{
 votre code
}



Selon le hook appelé $params contient des données précieuses relatives au contexte, n'ésitez pas à faire un var_dump dessus pour en saisir la teneur.

Dans prestashop , il existe de nombreux endroits ou sont placés ces hooks.
Une partie se trouve dans le code source lorsque certaines opérations sont effectuées, alors qu'une autre est appelée depuis les fichiers tpl au moment de l'affichage.

Vous trouverez très facilement une liste exhaustive des hooks existants sur google ou sur le forum.
Mais bien sûr tout bêtement dans la table (ps_)hook ...

Mon but ici n'étant pas de refaire l'existant mais juste tenter de vulgariser la chose, qui semble toujours bien plus complexe qu'elle ne l'est quand on la découvre juste (c'est bien le cas de tout ;) ), je vous laisse là dessus.

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More