Surcharger le core
Surcharger un block
Nous allons déclarer une surcharge dans le fichier config.xml de notre module Formation_Test, dans le noeud blocks :
<global>
<blocks>
<catalog> <!-- Noeud utilisé pour la déclaration des blocks dans le config.xml du module Mage_Catalog -->
<rewrite>
<product_list>Formation_Test_Block_Override_Catalog_Product_List</product_list>
</rewrite>
</catalog>
</blocks>
</global>
Ici, nous indiquons que notre classe Formation_Test_Block_Override_Catalog_Product_List va surcharger le block catalog/product_list, soit Mage_Catalog_Block_Product_List.
Notre classe devra donc l'étendre.
Nous allons par exemple surcharger la fonction getLoadedProductCollection() qui permet d'afficher les produits dans les catégories.
<?php
class Formation_Test_Block_Override_Catalog_Product_List extends Mage_Catalog_Block_Product_List {
/**
* Rewrite modification: ...
*/
public function getLoadedProductCollection() {
// Retourner une collection de produit n'étant composée que du produit ayant l'id 1
}
}
Surcharger un helper ou un model
La méthode est exactement la même que pour surcharger un block.
Nous allons par exemple surcharger le model catalog/product en lui ajoutant une fonction helloWorld().
Charger un produit avec un load, et afficher le résultat de cette fonction dans le content de la page d'accueil.
Surcharger un controller
La syntaxe est un peu différente pour surcharger un controller :
<config>
<frontend>
<routers>
<checkout> <!-- Noeud utilisé pour déclarer la route (et non le frontName) -->
<args>
<modules>
<!-- Nous indiquons ici dans quel dossier trouver la même architecture de controllers -->
<Formation_Test before="Mage_Checkout">Formation_Test_Override_Checkout</Formation_Test>
</modules>
</args>
</checkout>
</routers>
</frontend>
</config>
Attention, il faut utiliser l'instruction require_once pour inclure le fichier que l'on surcharge. En effet, les classes des controllers ne sont pas chargées par l'autoloader, à la différence des blocks, models et helpers.
<?php
require_once(Mage::getModuleDir('controllers','Mage_Checkout') . DS . 'CartController.php');
class Formation_Test_Override_Checkout_CartController extends Mage_Checkout_CartController {
/**
* Rewrite modification: disable checkout cart
*/
public function indexAction() {
// Rediriger vers la page d'accueil en indiquant que le panier est désactivé
}
}
Formation Magento Developpeur
Magento 1.X