bahamut100 Posted April 1, 2011 Share Posted April 1, 2011 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 More sharing options...
Julien Breux Posted April 4, 2011 Share Posted April 4, 2011 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 More sharing options...
bahamut100 Posted April 4, 2011 Author Share Posted April 4, 2011 Oh, Mr Breux qui répond en personne, c'est un honneur !En tout cas, merci beaucoup Link to comment Share on other sites More sharing options...
Julien Breux Posted April 4, 2011 Share Posted April 4, 2011 Honneur partagé, mais n'hésite pas à m'appeler Julien ^^ Link to comment Share on other sites More sharing options...
bahamut100 Posted April 15, 2011 Author Share Posted April 15, 2011 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 More sharing options...
Julien Breux Posted April 17, 2011 Share Posted April 17, 2011 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 More sharing options...
bahamut100 Posted April 18, 2011 Author Share Posted April 18, 2011 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 More sharing options...
TOonyTruand Posted April 18, 2011 Share Posted April 18, 2011 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 More sharing options...
bahamut100 Posted April 18, 2011 Author Share Posted April 18, 2011 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 More sharing options...
TOonyTruand Posted April 19, 2011 Share Posted April 19, 2011 Oui, je vais tester ça, et je posterais un retour.Ce serait peut être dans la logique des fichiers php qui n'ont pas de Controller,Soit pour notre Toto.php$controller = new FrontController();$controller->toto(); Link to comment Share on other sites More sharing options...
minimome Posted May 20, 2011 Share Posted May 20, 2011 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 hookINSERT 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 More sharing options...
Hofstadter Posted May 20, 2011 Share Posted May 20, 2011 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 More sharing options...
bahamut100 Posted May 20, 2011 Author Share Posted May 20, 2011 Merci beaucoup pour cette intervention, effectivement c'est beaucoup mieux ainsi Link to comment Share on other sites More sharing options...
minimome Posted May 20, 2011 Share Posted May 20, 2011 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 More sharing options...
bahamut100 Posted May 20, 2011 Author Share Posted May 20, 2011 Qu'entendez-vous par "rien ne va plus" ? Link to comment Share on other sites More sharing options...
minimome Posted May 20, 2011 Share Posted May 20, 2011 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 More sharing options...
bahamut100 Posted May 21, 2011 Author Share Posted May 21, 2011 Vous êtes en 1.4 ?Le hook est t'il bien déclaré dans header.php ? Link to comment Share on other sites More sharing options...
minimome Posted May 21, 2011 Share Posted May 21, 2011 Vous êtes en 1.4 ?Le hook est t'il bien déclaré dans header.php ? euh...nonLe hook est déclaré dans www/site/classes/FrontController.phpwww/site/themes/prestashop/header.tplPS 1.4.1, ouimerci pour les réponses Link to comment Share on other sites More sharing options...
minimome Posted May 22, 2011 Share Posted May 22, 2011 Merci bien pour votre temps Link to comment Share on other sites More sharing options...
bahamut100 Posted May 23, 2011 Author Share Posted May 23, 2011 Faites vous bien appel à la méthode parente : parent::displayHeader() après l'assignation des hooks ? Link to comment Share on other sites More sharing options...
minimome Posted May 23, 2011 Share Posted May 23, 2011 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 More sharing options...
minimome Posted May 24, 2011 Share Posted May 24, 2011 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_4Cordialement,Joelle Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now