Message-ID: <1170820749.379304.1711718175687.JavaMail.root@confluence-doc2-production> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_379303_2009895432.1711718175681" ------=_Part_379303_2009895432.1711718175681 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html Mieux comprendre et utiliser les hooks

Mieux comprendre et utiliser les hooks

Mieux comprendre et utiliser les =E2=80=9Choo= ks=E2=80=9D

Cet article a =C3=A9t=C3=A9 =C3=A9crit par Julien Breux, et publi=C3= =A9 sur le blog de PrestaShop le 5 mai 2011.

Qu=E2=80=99est-ce qu=E2=80=99un =C2=AB hook =C2=BB ?

Comme vous l=E2=80=99avez s=C3=BBrement d=C3=A9j=C3=A0 constat=C3=A9, Pr= estaShop est un logiciel qui vous permet de cr=C3=A9er des modules ayant po= ur but d=E2=80=99interagir directement avec l=E2=80=99affichage ou les =C3= =A9v=C3=A9nements du coeur de la solution.

Les =C2=AB hooks =C2=BB ou =C2=AB crochets =C2=BB vous permettent de r= =C3=A9cup=C3=A9rer ces =C3=A9v=C3=A9nements ou encore modifier l=E2=80=99af= fichage.

Il existe donc en r=C3=A9alit=C3=A9 deux types de =C2=AB hooks =C2=BB di= stincts.

Astuce Parfois les =C2=AB hooks =C2=BB de vue peuvent aussi servir de = =C2=AB hooks =C2=BB d=E2=80=99action, il suffit simplement de ne rien leur = faire afficher. Par exemple pour effectuer une t=C3=A2che r=C3=A9currente s= ur la page d=E2=80=99accueil avec le =C2=AB hook =C2=BB =C2=AB home =C2=BB.=

Si nous prenons l=E2=80=99exemple du th=C3=A8me de base de PrestaShop, s= ur la page d=E2=80=99accueil, la solution utilise les =C2=AB points d=E2=80= =99accroche =C2=BB suivant :

Nom du =C2=AB hook =C2=BB

Description

header

=C2=AB hook =C2=BB d=E2=80=99affichage =C2=AB= En-t=C3=AAte =C2=BB

top

=C2=AB hook =C2=BB d=E2=80=99affichage =C2=AB= Haut =C2=BB

leftColumn

=C2=AB hook =C2=BB d=E2=80=99affichage =C2=AB= Colonne de gauche =C2=BB

home

=C2=AB hook =C2=BB d=E2=80=99affichage =C2=AB= Page d=E2=80=99accueil =C2=BB

rightColumn

=C2=AB hook =C2=BB d=E2=80=99affichage =C2=AB= Colonne de droite =C2=BB

footer

=C2=AB hook =C2=BB d=E2=80=99affichage =C2=AB= Pied de page =C2=BB

Comme vous pouvez le constater, la totalit=C3=A9 des =C2=AB hooks =C2=BB= utilis=C3=A9s sont des =C2=AB hooks =C2=BB de vue.

Ce qui signifie que chacun de vos modules peut ind=C3=A9pendamment s=E2= =80=99accrocher sur ceux-ci et y afficher une information.

Comment le= s utiliser ?

Tout d=E2=80=99abord pour utiliser correctement les =C2=AB hooks =C2=BB,= il vous faut cr=C3=A9er dans la classe de votre module une m=C3=A9thode no= n statique publique commen=C3=A7ant par le mot cl=C3=A9 =C2=AB hook =C2=BB = suivi du nom du =C2=AB hook =C2=BB utilis=C3=A9.
Puis, un seul et uniqu= e argument est pass=C3=A9 =C3=A0 la m=C3=A9thode, il s=E2=80=99agit du tabl= eau des diff=C3=A9rentes informations de contexte envoy=C3=A9es au =C2=AB h= ook =C2=BB.

=20
public f=
unction hookNameOfHook($params)
{
}
=20

Ensuite, il est important dans l=E2=80=99installation de votre module de= l=E2=80=99accrocher aux diff=C3=A9rents =C2=AB crochets =C2=BB d=C3=A9sir= =C3=A9s. Pour cela, vous utiliserez la m=C3=A9thode =C2=AB registerHook =C2= =BB n=E2=80=99acceptant qu=E2=80=99un seul param=C3=A8tre =C3=A9galement, i= l s=E2=80=99agit du nom du =C2=AB hook =C2=BB

=20
public f=
unction install()
{
    return parent::install() && $this->registerHook('NameOfHook'=
);
}
=20

Astuce

Il est inutile d=E2=80=99utiliser la m=C3=A9thode de =C2=AB d=C3=A9sinst= allation =C2=BB du module pour supprimer le =C2=AB hook =C2=BB.

Enfin, il est important de comprendre le fonctionnement d=E2=80=99appel = de ces diff=C3=A9rents =C2=AB hooks =C2=BB afin de pouvoir en cr=C3=A9er de= nouveaux par la suite.

Il existe dans PrestaShop deux appels pour les =C2=AB hooks =C2=BB sacha= nt que le second tire parti du premier.

Le premier appel est la m=C3=A9thode directe. Il prend deux arguments : = le nom du =C2=AB hook =C2=BB et un tableau des diff=C3=A9rentes information= s de contexte.

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

Le second appel est un =C2=AB raccourci =C2=BB vers le premier afin d=E2= =80=99afficher plus =C2=AB proprement =C2=BB l=E2=80=99appel =C3=A0 effectu= er. Tous les =C2=AB raccourcis =C2=BB sont disponibles dans la classe =C2= =AB Hook =C2=BB.

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

L=E2=80=99appel du =C2=AB hook =C2=BB nomm=C3=A9 =C2=AB updateProduct = =C2=BB se fera donc comme ci-dessous dans le coeur de PrestaShop.

=20
Hook::up=
dateProduct(new Product(/* ... */));
=20

Nous avons bien appel=C3=A9 la classe =C2=AB HookCore =C2=BB en utilisan= t =C2=AB Hook =C2=BB comme nom de classe. Ceci est d=C3=BB =C3=A0 l=E2=80= =99override que nous aborderons la prochaine fois !

Com= ment en ajouter de nouveau ?

Si vous avez suivi jusqu=E2=80=99ici le d=C3=A9roulement d=E2=80=99utili= sation des =C2=AB hooks =C2=BB et apr=C3=A8s utilisation de PrestaShop, alo= rs vous allez s=C3=BBrement vous rendre compte qui vous manquera des =C2=AB= hooks =C2=BB comme =C2=AB FaireLeCafe =C2=BB, =C2=AB FaireAManger =C2=BB, = ou encore =C2=AB RepondreAuxClientsAMaPlace =C2=BB.

Pas de panique !

Pour cr=C3=A9er votre petit =C2=AB hook =C2=BB =C3=A0 vous, il vous suff= it tout simplement d=E2=80=99enregistrer une ligne dans la base de donn=C3= =A9es dans la table =C2=AB ps_hook =C2=BB avec le nom de votre =C2=AB hook = =C2=BB, son titre. (Voir 0 et 1 si celui-ci est compatible avec LiveEdit ou= non)

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

Enfin, utilisez-le(s) simplement comme nous avons vu dans cet article.

------=_Part_379303_2009895432.1711718175681--