Hooks are a way to associate your code to some specific PrestaShop events.
Most of the time, they are used to insert content in a page.
For instance, the PrestaShop default theme’s home page has the following hooks:
Hook name | Description |
---|---|
displayHeader | Displays the content in the page’s header area. |
displayTop | Displays the content in the page’s top area. |
displayLeftColumn | Displays the content in the page’s left column. |
displayHome | Displays the content in the page’s central area. |
displayRightColumn | Displays the content in the page’s right column. |
displayFooter | Displays the content in the page’s footer area. |
Hooks can also be used to perform specific actions under certain circumstances (i.e. sending an e-mail to the client).
You can get a full list of the hooks available in PrestaShop 1.6 in the “Hooks in PrestaShop 1.6” chapter of the Developer Guide.
It is easy to call a hook from within a controller: you simply have to use its name with the hookExec()
method: Module::hookExec('NameOfHook');
For instance:
$this->context->smarty->assign('HOOK_LEFT_COLUMN', Module::hookExec('displayLeftColumn'));
In order to attach your code to a hook, you must create a non-static public method, starting with the “hook” keyword followed by either “display” or “action”, and the name of the hook you want to use.
This method receives one (and only one) argument: an array of the contextual information sent to the hook.
public function hookDisplayNameOfHook($params) { // Your code. }
In order for a module to respond to a hook call, the hook must be registered within PrestaShop. Hook registration is done using the registerHook()
method. Registration is usually done during the module’s installation.
public function install() { return parent::install() && $this->registerHook('NameOfHook'); }
It is easy to call a hook from within a template file (.tpl
): you simply have to use its name with the hook function. You can add the name of a module that you want the hook execute.
For instance:
{hook h='displayLeftColumn' mod='blockcart'}
You can create new PrestaShop hooks by adding a new record in the ps_hook
table in your MySQL database. You could do it the hard way:
INSERT INTO `ps_hook` (`name`, `title`, `description`) VALUES ('NameOfHook', 'The name of your hook', 'This is a custom hook!');
…but PrestaShop enables you to do it the easy way:
$this->registerHook('NameOfHook');
If the hook “NameOfHook” doesn’t exist, PrestaShop will create it for you. No need to do the SQL query.
svsv