Chaque bloc ou groupe de blocs est déclaré dans le config.xml
fichier d'un module comme celui-ci (à l'intérieur de la <global>
balise).
Voici un exemple du module catalogue
<blocks><!-- marks definition of a block group -->
<catalog><!-- unique alias for blocks in the module -->
<class>Mage_Catalog_Block</class><!-- class prefix for all blocks -->
</catalog>
</blocks>
Cela signifie qu'un bloc peut être instancié en utilisant l'alias catalog/class_name_here
où class_name_here
est le reste du chemin de classe à partir du préfixe.
Cela signifie catalog/class_name_here
sera mappé par défaut à Mage_Catalog_Block_Class_Name_Here
.
Pour réécrire un bloc, vous devez créer un module qui dépend du module que vous essayez de changer ( Magento_Catalog
) dans mon exemple.
Et vous devez l'ajouter dans la config.xml
sous la <global>
balise.
<blocks>
<catalog><!-- alias of the block group you are rewriting -->
<rewrite><!-- reserved tag: specify that you are rewriting something -->
<class_name_here>YourNamespace_YourModule_Block_Your_New_Class_Here</class_name_here> <!-- tag: the rest of the alias of the class you are rewriting. value: the name of your class that rewrites the core class -->
</rewrite>
</catalog>
</blocks>
Créez ensuite la classe YourNamespace_YourModule_Block_Your_New_Class_Here
(en suivant la structure du dossier ZF) et faites étendre cette classe à la classe d'origine.
class YourNamespace_YourModule_Block_Your_New_Class_Here extends Mage_Catalog_Block_Class_Name_Here
{
//your awesome code here
}
Lorsque vous avez terminé, désactivez la compilation et réactivez-la (si nécessaire) et videz le cache.
Cela ne fonctionnera pas pour les blocs abstraits.
Cela ne fonctionne que pour les classes instanciées.
Exemple
Supposons que vous souhaitiez réécrire le fichier app \ code \ core \ Mage \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php qui a la classe Mage_Catalog_Block_Product_View_Options_Type_Select
dans votre propre module Marius_Test .
Ensuite, vous auriez besoin de cette entrée dans votre config.xml
:
<blocks>
<catalog>
<rewrite>
<product_view_options_type_select>Marius_Test_Block_Catalog_Block_Product_View_Options_Type_Select</product_view_options_type_select>
</rewrite>
</catalog>
</blocks>
app \ code \ local \ Marius \ Test \ Block \ Catalog \ Product \ View \ Options \ Type \ Select.php :
class Marius_Test_Block_Catalog_Product_View_Options_Type_Select extends Mage_Catalog_Block_Product_View_Options_Type_Select
{
//your awesome code here
}
Mage_Catalog_Block_Product_View_Options_Type_Select
dans app \ code \ local \ WR \ EPO \ Block \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php . Je l'ai essayé comme ceci: codepen.io/anon/pen/WYOqBr