Surcharger des blocks, models, helpers et controllers sur Magento

rewrite

Certains des modules natifs de Magento ne correspondent peut-être pas à 100% aux besoins de votre projet, vous aurez alors sûrement besoin de modifier le comportement d’un block, helper, model ou controller de l’un ou plusieurs de ces modules. Voici un petit tutoriel pour vous expliquer comment faire.

Pour notre exemple nous surchargerons un block, un helper, un model et un controller du module Mage_Catalog de Magento. Cette surcharge sera faite dans un nouveau module Sample_Catalog.

Surcharger un Block

Nous allons surcharger le block « catalog/product_list ».
Allez dans le fichier config.xml de votre module et ajoutez-y les lignes suivantes :

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Sample_Catalog>
<version>0.1.0</version>
</Sample_Catalog>
</modules>
<global>
<blocks>
<catalog>
<rewrite>
<product_list>Sample_Catalog_Block_Product_List</product_list>
</rewrite>
</catalog>
</blocks>
</global>
</config>

Créez le fichier « app/code/local/Sample/Catalog/Block/Product/List.php » avec le contenu suivant :

/**
* Product list
*
* @category   Sample
* @package    Sample_Catalog
* @author     Nicolas Verhoye <contact@nicolas-verhoye.com>
*/
class Sample_Catalog_Block_Product_List extends Mage_Catalog_Block_Product_List
{
}

Surcharger un Helper

Nous allons surcharger le helper « catalog/category ».
Allez dans le fichier config.xml de votre module et ajoutez-y les lignes suivantes :

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Sample_Catalog>
<version>0.1.0</version>
</Sample_Catalog>
</modules>
<global>
<helpers>
<catalog>
<rewrite>
<category>Sample_Catalog_Helper_Category</category>
</rewrite>
</catalog>
</helpers>
</global>
</config>

Créez le fichier « app/code/local/Sample/Catalog/Helper/Category.php » avec le contenu suivant :

/**
* Catalog category helper
*
* @category   Sample
* @package    Sample_Catalog
* @author     Nicolas Verhoye <contact@nicolas-verhoye.com>
*/
class Sample_Catalog_Helper_Category extends Mage_Catalog_Helper_Category
{
}

Surcharger un Model

Nous allons surcharger le model « catalog/product ».
Allez dans le fichier config.xml de votre module et ajoutez-y les lignes suivantes :

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Sample_Catalog>
<version>0.1.0</version>
</Sample_Catalog>
</modules>
<global>
<models>
<catalog>
<rewrite>
<product>Sample_Catalog_Model_Product</product>
</rewrite>
</catalog>
</models>
</global>
</config>

Créez le fichier « app/code/local/Sample/Catalog/Model/Product.php » avec le contenu suivant :

/**
* Catalog product model
*
* @category   Sample
* @package    Sample_Catalog
* @author     Nicolas Verhoye <contact@nicolas-verhoye.com>
*/
class Sample_Catalog_Model_Product extends Mage_Catalog_Model_Product
{
}

Surcharger un controller

Nous allons surcharger le controller « ProductController ».
Allez dans le fichier config.xml de votre module et ajoutez-y les lignes suivantes :

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Sample_Catalog>
<version>0.1.0</version>
</Sample_Catalog>
</modules>
<frontend>
<routers>
<catalog>
<args>
<modules>
<Sample_Catalog before="Mage_Catalog">Sample_Catalog</Sample_Catalog>
</modules>
</args>
</catalog>
</routers>
</frontend>
</config>

Créez le fichier « app/code/local/Sample/Catalog/controllers/ProductController.php » avec le contenu suivant :

/**
* Product controller
*
* @category   Sample
* @package    Sample_Catalog
* @author     Nicolas Verhoye <contact@nicolas-verhoye.com>
*/
require_once(Mage::getModuleDir('controllers','Mage_Catalog').DS.'ProductController.php');
class Sample_Catalog_ProductController extends Mage_Catalog_ProductController 
{
}

Nicolas Verhoye

Développeur Magento, Freelance

  1. Je suis bien content d’être tombé sur ce blog.

    J’ai envie de me lancer sur Magento depuis quelque temps.

    C’est surement l’occasion.

    Thomas Moreira, Développeur web à Strasbourg.

Laisser un commentaire

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