Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

Créer un nouveau hook sous Prestashop

J’expliquais dans mon article précédent comment greffer un module sur un hook supplémentaire. Ici je vais vous expliquer comment créer un nouveau hook que vous pourrez utiliser dans vos templates.

1. Enregistrez le hook dans la base de données.

Ouvrez phpMyadmin et affichez la table “ps_hook”.
Insérez un nouvel enregistrement à l’aide de cette requête:



INSERT INTO `ps_hook` (`id_hook`, `name`, `title`, `description`, `position`, `live_edit`) VALUES (NULL, 'top3', 'Top3', 'La description de mon hook', '1', '1');


2. Surchargez la classe “frontControllerCore”.

Allez dans le dossier “override/classes” et créez le fichier “FrontController.php“.
Ajoutez-y le code suivant:



class FrontController extends FrontControllerCore {
public function displayHeader()
{
self::$smarty->assign(array(
'HOOK_TOP3' => Module::hookExec('top3')
));
return parent::displayHeader();
}
}


Voila vous venez d’assigner à Smarty votre nouveau hook

/*** edit suite au commentaire de Pierre et dominique ***/

Il semblerait que dans certain car Smarty ne soit pas initialisé. Voici donc ci dessous la fonction qui prend ça en compte:


class FrontController extends FrontControllerCore {
public function displayHeader()
{

if (!self::$initialized)
parent::init();
self::$smarty->assign(array(
'HOOK_TOP3' => Module::hookExec('top3')
));
return parent::displayHeader();
}
}


3. Autorisez votre module à utiliser votre noueau hook

Choisissez le module que vous désirez accrocher à votre nouveau hook, modifiez la function “install” puis créez la fonction hook correspondante. Bon pour être plus claire voici un exemple avec le module “blocksearch”.



public function install()
{
if (!parent::install() OR !$this->registerHook('top')
OR !$this->registerHook('leftColumn')
OR !$this->registerHook('rightColumn')
OR !$this->registerHook('header')
OR !$this->registerHook('top3')
)
return false;
return true;
}


Ici j’ai rajouté la ligne “OR !$this->registerHook(‘top3’)



public function hookTop3($params)
{
return $this->hookRightColumn($params);
}


et là j’ai créé ma fonction de hook pour mon

4. Placez votre hook dans votre template

Dernière étape (la plus facile).

Ouvrez votre template et placez votre hook où vous désirez le voir apparaître.



<div id="top3">
{$HOOK_TOP3}
</div>


Poster un Commentaire

19 Commentaires sur "Créer un nouveau hook sous Prestashop"

Recevoir un email pour
avatar
Trier par:   plus récent | plus vieux | Plus de vote
jack
Invité

Merci pour ce tuto qui fonctionne avec les dernières versions de Prestashop !
Juste ce qu’il me fallait

Pierre
Invité
Pierre

Bonjour Olivier et merci pour ce tutorial qui fonctionne à merveille, enfin presque…
La création du nouveau Hook fonctionne très bien mais depuis j’ai l’erreur suivante sur la page “envoyer à un ami” :
Fatal error: Call to a member function assign() on a non-object in C:\wamp\www\prestashop\override\classes\FrontController.php on line 5

Je ne comprends, quel est le problème ?
Merci

Pierre
Invité
Pierre

Merci maniT4c, mais ce que je ne comprends, c’est que la page envoyer un ami focntionne bien sans la création du fichier FrontController.php mais ne fonctionne plus lorsque ce fichier est présent…
Comment instancier la classe smarty ?
Merci

Pierre
Invité
Pierre

J’ai ouvert un post sur le forum prestashop, j’attends un retour…

Pierre
Invité
Pierre
dominique
Invité
dominique

Bonjour,
J’obtiens la meme erreur Call to a member function assign() on a non-object avec les modules blockwishlist et mailalerts.
Sinon ça marche impec sur tout le site.

Voici la fonction que j’utilise dans l’ovveride du frontController:

public function displayHeader()
{
self::$smarty->assign(array(
‘HOOK_TOP_META_LEFT’=>Module::hookExec(‘topMetaLeft’),
‘HOOK_TOP_META_RIGHT’ => Module::hookExec(‘topMetaRight’)
));

return parent::displayHeader();
}
Le probleme vient bien de smarty mais je ne sais pas comment le resoudre

Si qqun a une idée je suis preneur :-)

dominique
Invité
dominique

Problème résolu pour moi en modifiant l’override comme ci-dessous :-) :

public function displayHeader()
{
if (!self::$initialized)
parent::init();
self::$smarty->assign(array(
‘HOOK_TOP_META_LEFT’ => Module::hookExec(‘topMetaLeft’),
‘HOOK_TOP_META_RIGHT’ => Module::hookExec(‘topMetaRight’)
));
return parent::displayHeader();
}

Que qqun me corrige svp si ce n’est pas la bonne manière de procéder.

également posté sur http://www.prestashop.com/forums/topic/181431-probleme-frontcontrollerphp/

mickael
Invité

Je me mets seulement à Prestashop depuis quelques mois et ce tuto tombe à pic, enfin j’espère qu’il va me permettre d’aller un peu plus loin.

Nicolas
Invité
Nicolas

Bonsoir,

merci pour ce tuto, par contre moi je rencontre le souci suivant:

j’ajoute mon frontController.php à “override/classes” et la boutique n’est plus accessible!

j’ai respecter scrupuleusement le code donné ci-dessus et même remplacer quelques truc pour voir mais j’ai l’impression que c’est le nom “frontController” qui fait planter le site.

Il ya un autre fichier “_frontController.php” dans “classes” a quoi sert-il?

pour info je suis en 1.4.9

Nicolas
Invité
Nicolas

Merci pour m’avoir répondu j’ai crée un poste avec plus de précision ici: http://www.prestashop.com/forums/topic/181431-resolu-probleme-frontcontrollerphp/

le navigateur me met “erreur serveur” dès que je charge le fichier frontController.php

(a coté les autres étapes fonctionnent, mon module et bien associé au hook: homeTop tout semble fonctionner) par contre rien est afficher pour l’instant dans le hook coté BackOffice manque plus que ce fichu frontController j’imagine…

Merci pour ton aide

Nicolas
Invité
Nicolas

Je reviens ici car je suis toujours bloqué sur mon FrontController.php qui veux pas fonctionner
j’ai mis un post mais personne ne semble sen préoccuper du coup si quelqu’un suit encore cette page veut-il bien a voir la gentilles de de jeter un rapide coup d’oeil? Merci. Rien que pour me donner des piste car je suis vraiment bloquer depuis une semaine la dessus et rien à se sujet sur le net..

Nicolas
Invité
Nicolas
Pierre
Invité
Pierre

Bonsoir,
Je suis assez novice dans prestashop, j’ai voulu installer le module “Customer follow-up v1.0.0 – par PrestaShop” j’ai eu un message d’erreur et depuis lors plus moyen de me reconnecter sur ma page admin

wpDiscuz