[Prestashop 1.6+] Créer un override pour un module

Depuis la version 1.6, les équipes de Prestashop ont mis en place (enfin !) un système d’override des modules, propre et natif.

Dans ce tutoriel, je vais vous montrer comment l’utiliser et vous vous en rendrez compte, c’est très simple.

Admettons que nous souhaitons greffer le module « blocksearch » dans le hook displayFooter.

Commençons par :

  1. Créer un dossier du nom du module (ici « blocksearch ») dans le dossier /override/modules
  2. Dans ce fichier, créer le fichier « blocksearch.php »

 

Nous allons maintenant éditer ce fichier. D’abord, déclarons la classe :

<?php

class BlockSearchOverride extends BlockSearch {


}

Vous noterez que la spécificité de ce nouveau système d’override est ainsi l’ajout du suffixe « Override » au nom de la classe (au lieu de « Core » pour les classes ou les controllers).

 

Enfin, pour ajouter le hook en question, rien de plus simple :

public function hookDisplayFooter($params) {
	return $this->hookTop($params);
}

Il ne vous reste plus qu’à vider le cache de l’autoload en utilisant l’une de ces méthodes :

  • Back-office > Paramètres avancés > Performances : bouton « Vider le cache » en haut à droite
  • Suppression du fichier /cache/class_index.php

Le tour est joué !

4 commentaires

  1. Frederic a écrit :

    Super, explications très claire.
    Je me permets juste de vous montrer ce que j’ai inscrit pour ma part qui concerne le Block cms information client à mettre dans le hook HomeTab.
    (avec une partie de code trouvé sur un autre site. peut être pourra en intéressé plus d’un).

    hookDisplayHome();
    }
    }

  2. Frederic a écrit :

    Je reviens vers vous.
    J’ai un soucis, après les modifications faite, je peux mettre mon module dans un nouveau hook. Mais lorsque je recharge la page, mon site n’est plus accessible …
    Je n’arrive pas à faire ce que je veux, je n’ai plus d’idée est ce que vous pouvez m’aider ?

    Voici ce que qu’il faut que j’arrive à faire :
    afficher le BlockCmsInfo dans le hookDisplayHomeTabContent

    J’ai suivis votre pocédure donc mon BlockCmsInfo.php ressemble à ça :
    (ma balise php)
    class blockCmsInfoOverride extends BlockCmsInfo
    {
    public function hookDisplayHomeTabContent($params){
    return $this->hookDisplayHome();
    }
    }

    ensuite vidage du cache ok puis suppr du class_index.php

    Lorsque je retourne sur le live Edit, je peux bien déplacer mon module sur le DisplayHomeTabContent, j’enregistre msg de confirmation ok
    et la le site ne fonctionne plus.
    Sans passer par le live edit, je l’ai également fait avec dégreffer la sélection et greffer puis enregistrer.
    Même soucis.

    Avez-vous une idée ?

  3. Frederic a écrit :

    J’ai solutionné mon pb.
    Il a fallu que j’inverse mes modules.
    En indiquant mon module blocknewproducts dans le hook displayHome.

Laisser un commentaire

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