Réecrire un block natif Magento (Rewrite)

Parfois on a besoin de changer le fonctionnement de magento, on veut par exemple modifier le comportement d’un block pour afficher une information en plus.Dans ce tutoriel nous verrons comment modifier un block natif de Magento.
Quand on veut faire ce genre de modification, il vaut mieux garder en tête une des règles de base du développement magento (attention si je fais une interro...ça tombera !! xD ):


On ne modifie JAMAIS le core de magento.


Oubliez donc l’idée d’aller modifier directement les fichiers du répertoire /app/code/core.

A la place, on va surcharger le Block qu'on souhaite modifier. C'est-à-dire créer une classe qui va étendre le Block du core et réécrire seulement la partie qu’on veut modifier. Ensuite, pour pouvoir l’utiliser on la déclare notre nouvelle classe dans le fichier config.xml

1- Commencez par recréer un module dans votre dossier Pfay que vous appellerez Myproduct

Créez donc le dossier : /app/code/local/Pfay/Myproduct Avec son etc/config.xml associé et n’oubliez pas de créer le fichier Pfay_Myproduct.xml dans app/etc/modules/.

2- Créez votre Block « modifié »

Ce qui nous intéresse c’est de réécrire le block Mage_Catalog_Block_Product_View. Nous voulons réecrire la méthode « hasRequiredOptions» de ce Block pour qu'elle renvoie toujours TRUE. On va donc créer dans /app/code/local/Pfay/MonProduit/Block/Product/ un fichier View.php. Qui contiendra :

class Pfay_Myproduct_Block_Product_View extends Mage_Catalog_Block_Product_View
{
    /**
     * Check if product has required options
     *
     * @return bool
     */
    public function hasRequiredOptions()
    {
        return true;
    }
}

Notez que notre nouveau block est en fait défini comme d'habitude quand nous créeons un block sauf qu'il étends le bloc qu'on veut modifier à savoir : Mage_Catalog_Block_Product_View

3- Dites à Magento de prendre en compte la nouvelle version de ce Block

Editez le config.xml de votre module Myproduct comme ceci et mettez dedans :

<?xml version="1.0"?>
<config>
 <modules>
    <Pfay_Myproduct>
        <version>1.0.0</version>
    </Pfay_Myproduct>
 </modules>

<global>
   <blocks>
    <catalog>
         <rewrite>
              <product_view>Pfay_Myproduct_Block_Catalog_Product_View</product_view>
             </rewrite>
      </catalog>
  </blocks>
 </global>
</config>

Grâce à ces balises, on dit à Magento que le block qui à pour code « catalog/product_view » (Mage_Catalog_Block_Product_View) sera remplacé par Pfay_Myproduct_Block_Catalog_Product_View. Il prendra ensuite Notre nouveau Block à la place de celui de base.

Le comportement de notre méthode est modifié mais on ne perds pas les autres méthodes du block grâce à l'extends du block natif Magento. Conclusion:
Et voila ! Vous savez maintenant réécrire un block ;) Comme d'habitude, N’hésitez pas à poser vos questions et si cela ne fonctionne pas chez vous téléchargez le code afin de le comparer avec le vôtre.
Documents disponibles pour cet article :
Les livres qui peuvent vous aider :
  • Livre Magento Developer's Guide by Alan Mc Gregor
  • Livre Magento Performance Optimization
  • Livre Grokking Magento Vinai
Questions sur cette leçon
Pas de questions pour cette leçon. Soyez le premier !

Vous devez etre connecté pour demander de l'aide sur une leçon.