Ajouter un hook à Prestashop

Prestashop est un système de gestion de contenu orienté e-commerce bien utile. Les modules du CMS sont positionnés sur les pages de votre site par l’intermédiaire de Hook. Vous pouvez visualiser quel modules est sur quel Hook en allant dans l’onglet Modules > Positions. Chaque position représente un Hook. Il nous est déjà arrivé d’avoir besoin de Hookd supplémentaires pour afficher nos modules à des endroits vraiment spécifiques. Voila comme faire.

Technologies utilisées : SQL et PHP

Outils nécessaires : Editeur HTML et accès à PhpMyAdmin

 

Etape 1 : Collez dans votre PhpMyAdmin le code ci-dessous pour ajouter le Hook à la table ps_hook (modifiez la requête avec le nom de votre propre Hook)

INSERT INTO `ps_hook` ( `id_hook` , `name` , `title` , `description` , `position` , `live_edit` ) VALUES ( NULL , 'nomDuHook', 'nomDuHook', NULL , '1', '0' );

Etape 2 : Éditez le fichier /classes/FrontController.php pour y ajouter l’appel à votre Hook, environ à la ligne 477

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

devient

self::$smarty->assign(array('HOOK_HEADER' => Module::hookExec('header'), 'HOOK_TOP' => Module::hookExec('top'), 'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn'), 'NOM_DU_HOOK' => Module::hookExec('nomDuHook')));

PS : Si vous faites la mise à jours de Prestashop, votre nouveau hook ne fonctionnera plus. Il sera écrasé. Depuis la version 1.4 de Prestashop (pour les versions précédentes, c’est pas de chance), vous pouvez surcharger les fichiers. Pour qu’il fonctionne toujours, vous devez surcharger la classe. Copier le fichier FrontController.php de base dans le dossier /override/classes/. Puis, mettez en place les modifications sur le fichier.
Modifiez ensuite la première ligne du fichier class FrontControllerCore en class FrontController extends FrontControllerCore. Enfin, ne gardez que la fonction displayHeader() dans le fichier :

class FrontController extends FrontControllerCore
{
    public function displayHeader()
    {
        // code
    }
}

Etape 3 : placez dans le template (fichier .tpl) de votre choix l’appel au Hook créé

{$NOM_DU_HOOK}

Etape 4 : modifiez le plugin à afficher dans cette zone en ajoutant une petite fonction dans le fichier php principal du module.

Il y a souvent dans les modules un Hook principal, et d’autres Hooks secondaires mais qui fonctionnent de la même façon. L’appel à ces Hooks secondaires se fait en général de cette façon :

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

De la même façon, nous allons autoriser l’affichage de ce module dans notre nouveau Hook :

function hookNomDuHook($params)
{
    return $this->hookLeftColumn($params);
}

Etape 5 : Il n’y a plus qu’à aller dans Modules > Positions et à ajouter le module de son choix à notre nouveau Hook.

Afficher un fichier XLS dans une page web
Créer / Modifier un thème Magento : Tour d'horizon

5 Comments on “Ajouter un hook à Prestashop”

  1. Bonjour,

    Merci du tuto. Cependant, la façon utilisé de correspond plus avec la nouvelle version de PS.
    Il faut surcharger la classe FrontController.php dans le dossier overrides/classes (à créer dans le cas échéant).
    Il faut éviter de réécrire du code dans le « core » de PS

    1. Disons que c’est plus propre de surcharger la classe effectivement mais ça fonctionne toujours avec la nouvelle version.

      Par contre en cas de mise à jours, le controller sera remis à zéro effectivement.

  2. La bonne méthode se trouve dans le PS de l’étape 2. Il ne faut pas préconiser cette que vous conseillez. Bien évidemment, elle fonctionne. Mais Il est tout aussi trivial que les vendeurs mettront leur boutique à jour à un moment donné. Et ce serait oublié surtout si cette opération n’est pas fréquente!

  3. Bonjour,

    Est ce valide pour la V1.25 si non pourrirez vous m’indiquer la procédure svp, ça serait sympa !

    Salutations

    1. La surcharge de classe a été introduite depuis la version 1.4 de Prestashop.
      Donc dans votre cas, c’est la méthode base de donnée + édition des fichiers de Prestashop qui devrait fonctionner.
      Faites tout de même une sauvegarde de vos données.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *