Override Module

Récemment, pour le projet d’un client, j’ai été obligé d’ overrider des modules natif de prestashop pour adapter à mes besoins.
Vous allez me dire qu’il fallait simplement faire une copie du module et le modifier.

Mais je n’aime pas ça, cela oblige à refaire la manipulation à chaque mise à jour.
J’ai donc créé une classe (et étendu la classe ModuleCore) pour permettre l’extension.


Attention, une solution est maintenant proposée en natif par prestashop à partir de la version 1.6.0.11.

Plus d’infos


Installation

Une fois l’archive téléchargée et dezippée, copiez/collez les deux fichiers dans le répertoire override/classes/module/.

Ensuite, il faut supprimer le fichier cache/class_index.php pour que les nouvelles classes soient pris en compte par prestashop. Le fichier /cache/class_index.php contient le lien entre la classe et le fichier de déclaration. Il peut être effacé sans crainte. Si vous avez déjà surchargé la classe Module, n’écrasez pas le fichier mais faites un simple merge des deux fichiers

Utilisation

L’utilisation n’est pas plus compliquée que l’installation, il vous suffit de créer une classe du même nom que celle du module dans le répertoire modules de votre thème et de réécrire les méthodes souhaitées.

Exemple

Prenons pour exemple le module BlockSearch, nous commençons donc par créer un fichier php qui va contenir notre classe de module dans le répertoire suivant:

themes/my_theme/modules/blocksearch/blocksearch.php

Ce fichier va contenir la définition de classes :

<?php class BlockSearch extends BlockSearchModule{

}

Lorsque vous allez recharger votre page, le module chargé ne sera plus celui par défaut mais la classe que nous venons de créer.

Maintenant, il ne reste plus qu’à écrire votre code comme bon vous semble:

<?php
class BlockSearch extends BlockSearchModule
{
  public function install()
  {
    if (!parent::install() || !$this->registerHook('displayLeftColumn'))
      return false;
    return true;
  }

  public function hookLeftColumn($params)
  {
    if (!$this->isCached('blocksearch.tpl', $this->getCacheId()))
    {
      $this->calculHookCommon($params);
      $this->smarty->assign('blocksearch_type', 'block');
    }
    return $this->display(__FILE__, 'blocksearch.tpl', $this->getCacheId());
  }
}

J’espère que cette première ressource vous aura plu et qu’elle vous donnera envie de revenir voir la suite 😉


OU