Jump to content

Comment ajouter un Hook dans la 1.4 ?


Recommended Posts

Bonsoir à tous, je bataille depuis un petit moment pour tenter d'ajouter un Hook.


Je souhaite ajouter un {HOOK_TOTO} dans mon footer.tpl.

Si je vais assigner mon hook directement dans le fichier FrontController.php, aucun soucis, mon Hook s'affche bien.

Par contre, comme il est essentiel de faire les choses proprement, j'ai voulu définir ce hook dans override/_FrontController.php (et ainsi surcharger la méthode displayFooter() comme il faut normalement le faire).

J'ajoute donc cette ligne :

$this->smarty->assign('HOOK_TOTO',  Module::hookExec('toto'));



Mais ô surprise, le hook ne s'affiche pas :/

J'ai trouvé des débuts de réponses (en anglais sur le forum), mais pas de solutions apparente.

Avez-vous eu le même problème ?

Link to comment
Share on other sites

Bonjour,

Afin de faire fonctionner un hook (myCustomHook pour l'exemple) dans un fichier de thème (.tpl), il vous faut les quatre choses suivantes :

1) Référencer en base de données votre hook

INSERT INTO `hook` SET name = 'myCustomHook', title = 'My custom hook', description = 'My custom hook'



2) Créer la méthode dans un module

hookMyCustomHook($params)



3) Utiliser la méthode statique "hookExec" de la classe "Module" pour appeler les différentes méthodes des modules "hookés".

Module::hookExec('MyCustomHook');



4) Assigner dans le fichier thème

$this->smarty->assign('HOOK_MY_CUSTOM',  Module::hookExec('MyCustomHook');



4b) L'utiliser dans le thème

{$HOOK_MY_CUSTOM}



Mélanger le tout et servez bien frais !

Link to comment
Share on other sites

  • 2 weeks later...

Je remonte le topic car je rencontre un problème.

J'ai essayé par tous les moyens d'ajouter un HOOK en surchargeant la classe FrontControllerCore, mais impossible de faire afficher mon HOOK.

Seule solution, l'ajouter dans la classe...

A quand une documentation technique officielle de la part de la team ?

Car proposer une surcharge du core, c'est génial, mais si on peut pas y faire ce qu'on veut, l'intérêt devient tout de suite plus limite (pour l'ajout de HOOK j'entends bien)

Link to comment
Share on other sites

La surcharge du cœur fonctionne à merveille !

Pour la faire fonctionner, il vous suffit de créer une classe "FrontController" héritant de "FrontControllerCore" dans le dossier "/override/classes/".

Un simple affichage du code du fichier "/config/autoload.php" vous aurez permis de comprendre le fonctionnement. L'intérêt d'une documentation technique est certes discutable sur les concepts, sur le code lui même : non.

Link to comment
Share on other sites

Effectivement,

tout est plus clair désormais !

Merci pour l'aide :)

PS :

Dans ma surcharge de méthode (displayHeader par exemple), je faisais appel à la méthode parente (en faisant parent::displayHeader() ) puis je voulais assigner un HOOK, mais de cette manière, ce n'est visiblement pas possible (peut-être une limitation de Smarty ?).

Donc aux éventuels développeurs qui auraient le même soucis, en cas de surcharge d'une méthode, copiez le code de la méthode parente, et faites vos modifs dessus.

Link to comment
Share on other sites

Bonjour,

Je me permets de répondre à ce post car tout n'est pas très clair pour moi :

Concernant le mini tutoriel de Julien Breux (enfin tutoriel tout court d'ailleurs :)), sur la partie 3 :
''3) Utiliser la méthode statique “hookExec” de la classe “Module” pour appeler les différentes méthodes des modules “hookés”.
Module::hookExec('MyCustomHook');
On parle bien du fichier Modules.php du répertoire classes ? A quelle ligne doit on rajouter cette méthode svp ?

2ème point, et vu ma tête embrouillé avec les différents topics English et la méthode évoquée par Bahamut :
J'ai vu qu'il était possible aussi de créer un fichier php pour le mettre dans le dossier ./override : est ce une 2ème méthode pour assigner un Hook ?

Car concernant la méthode de créer un fichier, admettons TotoController.php pour le dossier override (pour assigner le hook), cela ne peut fonctionner que si TotoController.php existe dans le dossier ./controllers ? Comment fait-on si il n'existe pas dans le dossier ./controllers ? Sur quoi se baser pour le créer ?

...faut être un ferru technicien va t-on me répondre, qui s'y connaît un minimum :)) Non mais en fait pour les débutants qui ont galéré ne serait ce qu'en bidouillant sur la 1.3 le php, et criant gloire après 2heures passés dessus...c'est un choc frontal !

Link to comment
Share on other sites

Alors (j'ai pas testé donc je sais pas si ça marche), admettons que tu es besoin de créer un nouveau Controller pour une raison x ou y, il ne faut pas créer le fichier TotoController.php dans le dossier Controller, mais bien dans Override.

Sauf qu'au lieu de faire hériter ta classe vers TotoControllerCore, tu peux la faire hériter de FrontController.

Je pense que ça ne devrait pas poser de soucis

Link to comment
Share on other sites

  • 1 month later...
Bonjour,

Afin de faire fonctionner un hook (myCustomHook pour l'exemple) dans un fichier de thème (.tpl), il vous faut les quatre choses suivantes :

1) Référencer en base de données votre hook
INSERT INTO `hook` SET name = 'myCustomHook', title = 'My custom hook', description = 'My custom hook'



2) Créer la méthode dans un module

hookMyCustomHook($params)



3) Utiliser la méthode statique "hookExec" de la classe "Module" pour appeler les différentes méthodes des modules "hookés".

Module::hookExec('MyCustomHook');



4) Assigner dans le fichier thème

$this->smarty->assign('HOOK_MY_CUSTOM',  Module::hookExec('MyCustomHook');



4b) L'utiliser dans le thème

{$HOOK_MY_CUSTOM}



Mélanger le tout et servez bien frais !



Bonjour, Julien, merci pour tout en général.
ceci dit, j'ai chargé vos tutoriaux sur le sujet mais je n'arrive pas à me faire une idée globale de ce qu'il faut faire pour créer un hook dans PS, une fois passée l'étape DB. Pourriez-vous préciser les étapes ci-dessus dans le style "bébé fait un pas" , sans ignorer les dossiers et fichiers concernés (leur chemin).
Link to comment
Share on other sites

Dans ma surcharge de méthode (displayHeader par exemple), je faisais appel à la méthode parente (en faisant parent::displayHeader() ) puis je voulais assigner un HOOK, mais de cette manière, ce n’est visiblement pas possible (peut-être une limitation de Smarty ?).

Donc aux éventuels développeurs qui auraient le même soucis, en cas de surcharge d’une méthode, copiez le code de la méthode parente, et faites vos modifs dessus.


Pour répondre à ton commentaire Bahamut100 et aider les personnes rencontrant le même soucis, il est possible d'assigner un hook en faisant appel à la méthode parente. Ci-dessous un exemple où j'assigne un nouveau hook à ma méthode displayHeader.

public function displayHeader() {
 self::$smarty->assign(array(
   'NOM_DE_MON_HOOK' => Module::hookExec('nomDeMonHook')
 ));

 parent::displayHeader();
}



Il est important de faire référence à la méthode parente après avoir assigné son hook, sinon il ne tiendra pas compte de votre surcharge.

Link to comment
Share on other sites

Dans ma surcharge de méthode (displayHeader par exemple), je faisais appel à la méthode parente (en faisant parent::displayHeader() ) puis je voulais assigner un HOOK, mais de cette manière, ce n’est visiblement pas possible (peut-être une limitation de Smarty ?).

Donc aux éventuels développeurs qui auraient le même soucis, en cas de surcharge d’une méthode, copiez le code de la méthode parente, et faites vos modifs dessus.


Pour répondre à ton commentaire Bahamut100 et aider les personnes rencontrant le même soucis, il est possible d'assigner un hook en faisant appel à la méthode parente. Ci-dessous un exemple où j'assigne un nouveau hook à ma méthode displayHeader.

public function displayHeader() {
 self::$smarty->assign(array(
   'NOM_DE_MON_HOOK' => Module::hookExec('nomDeMonHook')
 ));

 parent::displayHeader();
}



Il est important de faire référence à la méthode parente après avoir assigné son hook, sinon il ne tiendra pas compte de votre surcharge.



Bonsoir,
est-ce que cet ajout met tout en ordre? quand je crée un hook au-dessus du hook-top sans votre conseil (pour y mettre des bricoles genre tags et langues) pas de problème, mais quand je tente de créer un hook au-dessus du footer (pour y mettre un footer spécial) rien ne va plus. Une idée?
Link to comment
Share on other sites

Qu'entendez-vous par "rien ne va plus" ?


Une précision, je travaille sur deux sites différents, sur les mêmes serveurs et d'abord en local.

Pour l'un des sites, j'ai créé deux hooks. Premier hook au-dessus du "header" pas de problème, les modules se sont bien affichés, le site fonctionnait. Deuxième hook, distraction et petite erreur de parsing pour le module concerné (pas un module d'origine, créé exprès et fonctionnel ailleurs). J'ai corrigé l'erreur, c'est ce qu'il semblait. L'admin n'affichait plus de problème.
Quand j'ai voulu atteindre le site, zéro, rien, page blanche. L'autre site (sans ajout de hook) s'affichait, et lui marchait très bien en local.
Voilà. Si vous avez une idée pour que cesse la page blanche, merci d'avance.
Link to comment
Share on other sites

Dans ma surcharge de méthode (displayHeader par exemple), je faisais appel à la méthode parente (en faisant parent::displayHeader() ) puis je voulais assigner un HOOK, mais de cette manière, ce n’est visiblement pas possible (peut-être une limitation de Smarty ?).

Donc aux éventuels développeurs qui auraient le même soucis, en cas de surcharge d’une méthode, copiez le code de la méthode parente, et faites vos modifs dessus.


Pour répondre à ton commentaire Bahamut100 et aider les personnes rencontrant le même soucis, il est possible d'assigner un hook en faisant appel à la méthode parente. Ci-dessous un exemple où j'assigne un nouveau hook à ma méthode displayHeader.

public function displayHeader() {
 self::$smarty->assign(array(
   'NOM_DE_MON_HOOK' => Module::hookExec('nomDeMonHook')
 ));

 parent::displayHeader();
}



Il est important de faire référence à la méthode parente après avoir assigné son hook, sinon il ne tiendra pas compte de votre surcharge.



Bonjour Hofstadter, pourriez-vous dire où vont les entrées parent, après chaque nouveau hook ou bien une seule à la fin et dans quel fichier. Il s'agit bien du fichier classes/frontController?


public function displayHeader(){

self::$smarty->assign(array(
'HOOK_HEADER' => Module::hookExec('header'),
'HOOK-RANTANPLAN'.........................................,
'HOOK_TOP' => Module::hookExec('top'),
'HOOK-LASSIE'.................................................,
'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn'),
'HOOK-MILOU'...................................................,
));



Merci bien pour votre temps

Link to comment
Share on other sites

Faites vous bien appel à la méthode parente : parent::displayHeader() après l'assignation des hooks ?


Bonjour bahamut100, j'ai trouvé ce fil sur les forums US, il y a des réponses plus complètes, et aussi une réponse Plug-in (pas besoin de créer un nouveau hook, ce qui est très bien quand c'est possible)

http://www.prestashop.com/forums/viewthread/90040/P15/integration/solved_how_to_add_new_hook_in_prestashop_1_dot_4

Cordialement,
Joelle
Link to comment
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
×
×
  • Create New...