DBDesign Posted July 7, 2011 Share Posted July 7, 2011 Bonjour à tous,Padawan développeur autodidacte, je vient juste de mettre à Prestashop, et rencontre quelques problèmes pour l'ajout d'un nouveau hook.Donc pour bien faire les choses, j'ai lu et décortiqué avec soin ce thread:http://www.prestashop.com/forums/viewthread/100778/P0/developpement/comment_ajouter_un_hook_dans_la_1_dot_4_Et plus particulièrement l'intervention de Julien Breux. Mais malgré tout, je suis toujours coincé.Voilà ce que j'aimerais faire: ajouter un nouveau hook dans mon Header.tpl, pour celà j'ai strictement repris l'exemple de Julien ('myCustomHook'). Je reprends donc les 4 choses nécessaires selon Julien pour comprendre là où ça coinçe: 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' Ca c'est fait, pas de problème, mon "myCustomHook" apparaît bien dans ma BD2) Créer la méthode dans un module hookMyCustomHook($params) Là commencent mes soucis. J'ai donc ajouté le code suivant à mon moduel "blocpermanentlinks.php" que je souhaiterais voir apparaître dans mon Header, juste avant mon hook "Top"function hookMyCustomHook($params)($params) { return $this->hookTop($params); } 3) Utiliser la méthode statique “hookExec” de la classe “Module” pour appeler les différentes méthodes des modules “hookés”. Ici, j'ai crée mon fichier "Frontcontroller.php" dans Override avec le code suivant:<?php public function displayHeader() { self::$smarty->assign(array( 'HOOK_MY_CUSTOM ' => Module::hookExec('MyCustomHook'); )); parent::displayHeader(); } 4) Assigner dans le fichier thème $this->smarty->assign('HOOK_MY_CUSTOM', Module::hookExec('MyCustomHook'); Là par contre, j'étais vraiment perdu. Julien parle d'un fichier "théme". Mais quel fichier? Le ficher "header.php", le "header.tpl" ???4b) L’utiliser dans le thème {$HOOK_MY_CUSTOM} Là, tout va bien!!Alors quelqu'un pourrait-il me dire où j'ai merdé? Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 Vous avez des espaces qui trainent à l'étape 3 : 'HOOK_MY_CUSTOM ' Supprimez les Autrement, il faut aussi que dans votre fichier header.tpl de votre thème vous ajoutiez {$HOOK_MY_CUSTOM} quelque part.Pour finir, il faudra aussi que vous accrochiez votre module à ce hook dans l'administration : modules -> blocpermanentlinks -> gérer ses points d'accroche. Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Merci pour cette tentative de réponse Raphaël!J'ai bien supprimé les espaces mais rien n'y fait! J'ai même vidé mon cache "Smarty" pour être sûr.En effet, j'ai bien greffé mon module à mon nouveau Hook ( qui apparaît bien) dans mon BackOffice.Mais ma {$HOOK_MY_CUSTOM} reste vide! Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 Vérifiez que vos méthodes hookMyCustomHook() et la surchage displayHeader() soient bien appelées en mettant un petit debug du genre "echo 'toto';" dedans. Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Là par contre, comme je le disais je suis plûtot non averti en Dév, surtout en Php.Donc j'insère du code dans mon "FrontController.php" qui se situe dans Override/Controllers? <?php public function displayHeader() { self::$smarty->assign(array( 'HOOK_MY_CUSTOM' => Module::hookExec('MyCustomHook'); )); parent::displayHeader(); } Pourriez-vous modifier mon code svp?Merci mille fois! Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 <?php public function displayHeader() { echo 'turlututu'; self::$smarty->assign(array( 'HOOK_MY_CUSTOM' => Module::hookExec('MyCustomHook'); )); parent::displayHeader(); } function hookMyCustomHook($params)($params) { echo 'kikoooo'; return $this->hookTop($params); } Ensuite rechargez la page, ouvrez la source sur votre navigateur, et dîtes moi si "kikoooo" ou "turlututu" sont présent dans la source Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Non toujours rien. Juste pour être sûr, le deuxième bout de code doit bien être inséré dans le fichier module, en l’occurrence ", blockpermanentlinks.php? (chez moi en local: www/prestashop/module/blockpermanentlinks.php) Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 Oui. C'est étrange que rien ne s'affiche, il devrait y avoir au moins le turlututu :-kPouvez vous copier le contenu exact du fichier override/classes/frontcontroller.php ici svp ? Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Voici le code: <?php public function displayHeader() { echo 'turlututu'; self::$smarty->assign(array( 'HOOK_MY_CUSTOM' => Module::hookExec('MyCustomHook'); )); parent::displayHeader(); } Et là, je sens que j'ai fait une connerie lol Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 Ah c'est normal, il manque des trucs dans le fichier, remplacez votre fichier par ceci : <?php class FrontController extends FrontControllerCore { public function displayHeader() { echo 'turlututu'; self::$smarty->assign(array( 'HOOK_MY_CUSTOM' => Module::hookExec('MyCustomHook'); )); parent::displayHeader(); } } Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Toujours pas! Le backoffice "modules" me renvoi une erreur:Erreur(s) de parsing dans le(s) module(s) blockpermanentlinks Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 Pouvez vous mettre en pièce jointe le fichier modules/blockpermanentlinks/blockpermanentlinks.php ? Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Voilà! blockpermanentlinks.php Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 Étrange je n'ai pas cette erreur en mettant ce fichier chez moi. Vous êtes sur qu'il s'agit du bon fichier ? Cette erreur signifie qu'il y a une erreur PHP dans le fichier en question, or je n'en vois aucune et mon éditeur ne me signale aucune erreur :-k Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Ah j'avais oublié, il y avait 2 "($params)" à la suite dans mon fichier.J'ai enlevé le 2ème dans la version envoyée, du coup plus d'erreur de "parsing" mais toujours pas de "turlututu"... Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Pourriez-vous me dire sur quel fichier, et à quelle ligne doit être ajouté le code de l'étape 4: $this->smarty->assign('HOOK_MY_CUSTOM', Module::hookExec('MyCustomHook'); Merci beaucoup pour votre aide... Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 Dans le fichier frontcontroller que vous avez surchargé, jusque là c'est censé marcher, étrange que ce ne soit pas le cas :-kVotre fichier s'appelle bien override/classes/FrontController.php mot pour mot, majuscules comprises ? Si vous remplacez echo 'turlututu'; par exit; que se passe t'il quand vous rafraichissez la page ? Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Non je l'ai mis dans override/controllers/FrontController.phpMon dossier override/classes comporte déjà un fichier "_FrontController.php". 2 avec celui que je viens de déplacer sur vos conseils.Mais maintenant, je n'ai plus rien à l"écran Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 Okay c'est normal, vous pouvez supprimer le "exit;" du fichier, normalement ça devrait marcher maintenant Link to comment Share on other sites More sharing options...
DBDesign Posted July 7, 2011 Author Share Posted July 7, 2011 Je n'ai plus rien du tout à l'écran....A ce stade, et malgré votre aide, ca ne marche pas.Je pense que je vais tout ré-installer, partir du template Prestashop par défaut et recommencer toutes les opérations.Je vous tiens au courant, et merci encore! Je suis étonné par votre réactivité. Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 7, 2011 Share Posted July 7, 2011 Essayez de reprendre à plat oui, c'est toujours assez délicat quand on ne connait pas à fond le PHP de faire ce genre de modifications.Bon courage Link to comment Share on other sites More sharing options...
DBDesign Posted July 8, 2011 Author Share Posted July 8, 2011 Bonjour Raphaêl,après une bonne centaine d'essais/erreurs, j'ai enfin trouvé ce qui n'allait pas.J'ai fini par éditer directement le fichier classes/FrontController.php en ajoutant mon hook entre tous les hooks existants déjà...et là le miracle s'est produit. J'ai donc compris que le problème venait de mon override/classes/FrontController.phpJ'ai donc copié / collé la partie que j'avais édité sous le fichier du coeur: self::$smarty->assign(array( 'HOOK_HEADER' => Module::hookExec('header'), 'HOOK_MY_CUSTOM' => Module::hookExec('MyCustomHook'), 'HOOK_TOP' => Module::hookExec('top'), 'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn') )); Pour, au final, me retrouver avec le override/classes/FrontController.php suivant: <?php class FrontController extends FrontControllerCore { public function displayHeader() { self::$smarty->assign(array( 'HOOK_HEADER' => Module::hookExec('header'), 'HOOK_MY_CUSTOM' => Module::hookExec('MyCustomHook'), 'HOOK_TOP' => Module::hookExec('top'), 'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn') )); parent::displayHeader(); } } Et donc tout marche parfaitement...Je vous remercie donc une nouvelle fois pour votre aide. Il est certain que si j'avais une meilleure connaissance du PHP, je n'aurais pas autant tâtonné. Mais la preuve en est, que j'arrive toujours à mes fins.Habitué et fan de Wordpress depuis 2 ans, pour le développement de mon site, je regrette que la documentation Prestashop ne soit pas plus fournie. Avec un codex Prestashop comme celui de WP, Prestashop atteindrait la perfection.En tout cas, merci ! Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 8, 2011 Share Posted July 8, 2011 Bonne nouvelle si ça marche La documentation est en cours de relecture actuellement, et sera bientôt disponible 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