Créer un hook dans un module PS1.6

Prestashop
1.6

Difficulté
2/4

Durée
20′

 

Bon il arrive parfois que l’on ne souhaite pas passer par les points d’accorches standards proposés par les modules de Prestashop, et que l’on veuille afficher le contenu d’un module n’importe où dans un template, ou dans untemplate spécifique, dans une page spécifique voir dans un autre module.

Pour solutionner ce « casse tête », il existe une solution bien pratique depuis la version 1.5 de Prestashop : les hook et l’override.

 

Quelques prérequis seront nécessaires pour la compréhension de ce tutoriel :

  • connaître la structure de fichiers de Pretashop
  • être familier avec le langage HTML
  • connaître le langage PHP (nécessaire pour modifier le fonctionnement d’un module ou étendre les fonctionnalités d’une classe)

Pour illustrer ce tutoriel nous allons prendre l’exemple d’un site Prestashop avec un template à deux colonnes, et on veut afficher le bloc contact Infos (module standard de Prestahop) dans le template de la page produit. Notre theme s’appelera « monTheme ».

 

Rappel sur l’architecture d’un thème Prestashop

 

Les thèmes de Prestashop se situent dans le dossier « themes » situé à la racine du site. Exemple pour notre thème monTheme :

  • themes/monTheme/css : contient tous les fichiers CSS
  • themes/monTheme/img : contient toutes les images
  • themes/monTheme/js : contient tous les scripts javascript
  • themes/monTheme/lang : contient toutes les traductions
  • themes/monTheme/*.tpl : les templates des pages du site, ils contiennent du code html et smarty
  • override/modules/: contient les dossiers des modules que l’on peut surcharger (override)

 

Etape 1 – extension de la classe du module Prestashop blockcontactinfos

 

Nous devons créer un fichier dans le dossier override du module Block contact infos :

override/modules/blockcontactinfo/blockcontactinfos.php

Nous allons étendre la classe de base du module pour créer notre hook et l’instancier, puis créer la fonction d’affichage du hook. Attention respectez bien les nom des classes que vous dérivez (capitalisation). Voici le code à créer dans le fichier, dans notre exemple notre hook s’appelle monHookContact :

class BlockcontactinfosOverride extends Blockcontactinfos {
    public function install() {
        if (!parent::install())
            return false;
        // on enregistre notre hook avec un nom unique
        if (!$this->registerHook('monHookContact')	)
            return false;	
        return true;
    }

    // notre fonction qui va afficher le contenu de notre hook
    public function hookmonHookContact($params) {
        // mettez ici votre propre code ou appeler comme ici le hook de base du module
        return parent::hookFooter($params);
    }
}

 

Etape 2 – L’intégration du hook dans le template de la fiche produit

 

Editez le fichier template de la fiche produit dans votre thème :

themes/monTheme/product.tpl

 

Puis insérer le code suivant à l’endroit où vous voulez afficher votre module dans le template :

{hook h='monHookContact'}

 

Etape 3 – Réinitialiser le module pour prendre en compte votre nouveau hook

 

Dans le backoffice de Prestashop allez dans le menu Modules / Modules, puis dans la case de rechercher tapez contactinfos vous verrez apparaître le nom du module Bloc infos contact, sélectionnez le puis cliquez sur le lien Réinistialiser du module. Videz le cache de Prestashop dans le backoffice dans Paramètres Avancés / Performances

Voilà rechargez une page produit et vous verrez apparaître votre module.

 

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.