Jump to content

[Résolu] Problème d'ajout Nouveau HOOK 1.4


Recommended Posts

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 BD

2) 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

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

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

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

<?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

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

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

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

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

Dans le fichier frontcontroller que vous avez surchargé, jusque là c'est censé marcher, étrange que ce ne soit pas le cas :-k

Votre 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

Non je l'ai mis dans override/controllers/FrontController.php

Mon 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

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

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.php

J'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

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...