Child pages
  • Mieux comprendre et utiliser les hooks

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Comme vous l’avez sûrement déjà constaté, PrestaShop est un logiciel qui vous permet de créer des modules ayant pour but d’interagir directement avec l’affichage ou les événements du cœur de coeur de la solution.

Les « hooks » ou « crochets » vous permettent de récupérer ces événements ou encore modifier l’affichage.

...

Tout d’abord pour utiliser correctement les « hooks », il vous faut créer dans la classe de votre module une méthode non statique publique commençant par le mot clé « hook » suivi du nom du « hook » utilisé.
Puis, un seul et unique argument est passé à la méthode, il s’agit du tableau des différentes informations de contexte envoyées au « hook ».

Code Block

public function hookNameOfHook($params)
{
}

Ensuite, il est important dans l’installation de votre module de l’accrocher aux différents « crochets » désirés. Pour cela, vous utiliserez la méthode « registerHook » n’acceptant qu’un seul paramètre également, il s’agit du nom du « hook »

Code Block

public function install()
{
    return parent::install() && $this->registerHook('NameOfHook');
}

...

Le premier appel est la méthode directe. Il prend deux arguments : le nom du « hook » et un tableau des différentes informations de contexte.

Code Block

$params = array(
    'param_1' => 'value_1',
    'param_2' => 'value_2',
);
Module::hookExec('NameOfHook', $params);

Le second appel est un « raccourci » vers le premier afin d’afficher plus « proprement » l’appel à effectuer. Tous les « raccourcis » sont disponibles dans la classe « Hook ».

Code Block

class HookCore extends ObjectModel
{
    // ...
    static public function updateProduct($product)
    {
        $params = array('product' => $product);
        return Module::hookExec('updateProduct', $params);
    }
    // ...
}

L’appel du « hook » nommé « updateProduct » se fera donc comme ci-dessous dans le cœur coeur de PrestaShop.

Code Block

Hook::updateProduct(new Product(/* ... */));

...

Pour créer votre petit « hook » à vous, il vous suffit tout simplement d’enregistrer une ligne dans la base de données dans la table « ps_hook » avec le nom de votre « hook », son titre. (Voir 0 et 1 si celui-ci est compatible avec LiveEdit ou non)

Code Block

INSERT INTO `ps_hook` (`name`, `title`, `description`) 
  VALUES ('nameOfHook', 'Name Of Hook', 'It is a custom hook !');

...