Jump to content

hook non reconnu alors que bien dans BO


Recommended Posts

Hello,

 

Je viens de faire une mise à jour de presta 1.4 vers 1.6 et j'ai réussi à résoudre à peu près tous les petits bug excepté 1 à savoir que j'avais un module spécifique pour l'affichage du menu dans le header et depuis la mise à jour impossible de l'afficher.

Le hook existe bien dans le back office mais au niveau du front j'ai l'erreur suivante 

 

Undefined index: HOOK_MENUTOP monsite.com/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 206

 

Quelqu'un peut-il me dire ce qui cloche ?

Link to comment
Share on other sites

Partant d'une migration 1.4, il y a de fortes chances que nombre de hook manquent dans ta 1.6.

L'effet kisscool est que cela fait des entrées avec id_hook=0 qui plantent la mise en oeuvre d'un thème mais avec message visible seulement si tu es en debug.

Je pencherai pour ce genre de cafouillage

Link to comment
Share on other sites

le hook est bien écrit dans le front controller 

self::$smarty->assign(array(
			'HOOK_HEADER' => Module::hookExec('header'),
			'HOOK_TOP' => Module::hookExec('top'),
			'HOOK_BANNER' => Module::hookExec('banner'),
			'HOOK_MENUTOP' => Module::hookExec('menutop'),
			'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn')

Quelqu'un a une idée de ce qui ne va pas et de la solution à apporter pour que le hook menutop puisse s'afficher en front ?

Link to comment
Share on other sites

Bonjour,

 

Si vous avez effectué une mise à jour, vérifiez les paramètres avancés (Performances) de votre boutique.

L'option "Désactiver les surcharges" est sans nuls doutes placés à "Oui".

 

Ce qui a pour effet de ne pas avoir cette variable traitée au sein de votre boutique et donc non existante.

 

Puisque vous faites une mise à jour, je vous conseillerais par ailleurs vivement de modifier la pratique utilisée: ne pas déclarer HOOK_MENUTOP au sein d'une surcharge de FrontController mais utiliser {hook h='menutop'} en lieu et place de {$HOOK_MENUTOP} dans votre template, uniquement.

  • Like 1
Link to comment
Share on other sites

Bah dans une 1.6 ce n'est pas Module::hookExec() déjà...

        if (!$this->useMobileTheme()) {
            // These hooks aren't used for the mobile theme.
            // Needed hooks are called in the tpl files.
            $this->context->smarty->assign(array(
                'HOOK_HEADER'       => Hook::exec('displayHeader'),
                'HOOK_TOP'          => Hook::exec('displayTop'),
                'HOOK_LEFT_COLUMN'  => ($this->display_column_left  ? Hook::exec('displayLeftColumn') : ''),
                'HOOK_RIGHT_COLUMN' => ($this->display_column_right ? Hook::exec('displayRightColumn', array('cart' => $this->context->cart)) : ''),
            ));
        } else {
            $this->context->smarty->assign('HOOK_MOBILE_HEADER', Hook::exec('displayMobileHeader'));
        }
Link to comment
Share on other sites

"Désactivé les surchages" j'ai donc mis sur NON  et voici le warning 

 

Warning à la ligne 1829 du fichier monsite.com/classes/controller/AdminController.php

[2] Cannot modify header information - headers already sent by (output started at monsite.com/override/classes/Tools.php:154)

 

Après plus d'accès au front avec les erreurs suivantes : 

 

Strict Standards: Declaration of Tools::getMetaTags() should be compatible with ToolsCore::getMetaTags($id_lang, $page_name, $title = '') in /override/classes/Tools.php on line 154

Warning: Cannot modify header information - headers already sent by (output started at /override/classes/Tools.php:154) in classes/shop/Shop.php on line 428

Warning: Cannot modify header information - headers already sent by (output started at /override/classes/Tools.php:154) in /classes/shop/Shop.php on line 429

 

Une idée ???

Link to comment
Share on other sites

Comme vous venez d'une version 1.4 fortement surchargée (à première vue) ; vous allez devoir faire quelques changements dans ces fameuses surcharges (et voir si elles sont toujours utiles).

 

Dans le cas présent, vous avez une première erreur qui résulte du fait que votre méthode getMetaTags() dans la classe Tools ne possède pas la même signature que la classe originelle, désormais mise à jour (et qui serait dès lors getMetaTags($id_lang, $page_name, $title = '').

Link to comment
Share on other sites

Ouais mais bon, je n'ai jamais vu un prestashop sain fonctionner mieux en désactivant les overrides

Ni que ça concerne les hooks...

 

Peut-on juste vérifier qu'il n'existe aucune entrée dans la table ps_hook_module avec id_hook= 0 pour avancer sérieusement ?

Link to comment
Share on other sites

C'est un cas classique d'école, tu sais. D'autant dès lors qu'il à réalise une mise à jour via le module One Click.

 

Ce module se charge d'activer cette option.

 

Précédemment, il nous a indiqué que son PrestaShop retourne une erreur Smarty sur une variable non trouvée. Que cette variable est instanciée via la classe FrontController.

Tu ne peux en déduire, sérieusement, qu'une seule et unique chose.

 

Et ça concerne donc bien les hooks dès que ceux-ci sont appellés dans une variable non pré-existante afin de pouvoir l'utiliser au sein d'un template.

D'autant sur une version 1.4, la méthodologie de l'appel de {hook} n'étant pas possible pour ces versions.

Link to comment
Share on other sites

J'ai modifié l'appel de hook dans le template en utilisant ceci : {hook h=menuTop}  et désormais je n'ai plus aucun message d'erreur mais le fameux module (menu) que j'essaie de greffer sur ce menuTop n'apparait toujours pas en front, j'ai bien réinitialisé le module en BO mais rien à faire.

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