Ogni blocco o gruppo di blocchi è dichiarato nel config.xml
file di un modulo come questo (all'interno del <global>
tag).
Ecco un esempio dal modulo del catalogo
<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>
Ciò significa che un blocco può essere istanziato usando l'alias catalog/class_name_here
dove si class_name_here
trova il resto del percorso di classe a partire dal prefisso.
Questo significa catalog/class_name_here
che verrà mappato per impostazione predefinita su Mage_Catalog_Block_Class_Name_Here
.
Per riscrivere un blocco è necessario creare un modulo che dipende dal modulo che si sta tentando di modificare ( Magento_Catalog
) nel mio esempio.
E devi aggiungere questo nel tag config.xml
sotto <global>
.
<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>
Quindi creare la classe YourNamespace_YourModule_Block_Your_New_Class_Here
(seguendo la struttura delle cartelle ZF) e fare in modo che questa classe estenda la classe originale.
class YourNamespace_YourModule_Block_Your_New_Class_Here extends Mage_Catalog_Block_Class_Name_Here
{
//your awesome code here
}
Al termine, disabilitare la compilazione e abilitarla di nuovo (se necessario) e cancellare la cache.
Questo non funzionerà per i blocchi astratti.
Funziona solo per le classi che vengono istanziate.
Esempio
Supponiamo che tu voglia riscrivere il file app \ code \ core \ Mage \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php che ha la classe Mage_Catalog_Block_Product_View_Options_Type_Select
nel tuo modulo Marius_Test .
Quindi avresti bisogno di questa voce nel tuo 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
in app \ code \ local \ WR \ EPO \ Block \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php . L'ho provato in questo modo: codepen.io/anon/pen/WYOqBr