Prestashop
1.5
Difficulté
2/4
Durée
20′
Bon il arrive parfois que l’on ne souhaite pas passer par les points d’accroches 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 un template 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’appellera « 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
- themes/monTheme/modules : contient les dossiers des modules que l’on peut personnaliser
Etape 1 – extension de la classe du module Prestashop blockcontactinfos
Nous devons créer un fichier dans le dossier du module Block contact infos :
themes/monTheme/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 BlockcontactinfosTheme 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.
Voilà rechargez une page produit et vous verrez apparaître votre module.
Voir le tuto pour la version 1.6