Cada bloque o grupo de bloques se declara en el config.xml
archivo de un módulo como este (dentro de la <global>
etiqueta).
Aquí hay un ejemplo del módulo de catálogo.
<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>
Esto significa que se puede crear una instancia de un bloque utilizando el alias catalog/class_name_here
donde class_name_here
está el resto de la ruta de clase comenzando desde el prefijo.
Esto significa catalog/class_name_here
que se asignará de forma predeterminada a Mage_Catalog_Block_Class_Name_Here
.
Para volver a escribir un bloque, necesita crear un módulo que dependa del módulo que está intentando cambiar ( Magento_Catalog
) en mi ejemplo.
Y necesita agregar esto en config.xml
la <global>
etiqueta debajo .
<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>
Luego cree la clase YourNamespace_YourModule_Block_Your_New_Class_Here
(siguiendo la estructura de carpetas ZF) y haga que esta clase extienda la clase original.
class YourNamespace_YourModule_Block_Your_New_Class_Here extends Mage_Catalog_Block_Class_Name_Here
{
//your awesome code here
}
Cuando haya terminado, desactive la compilación y actívela nuevamente (si es necesario) y borre la memoria caché.
Esto no funcionará para bloques abstractos.
Solo funciona para clases que se instancian.
Ejemplo
Supongamos que desea reescribir el archivo app \ code \ core \ Mage \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php que tiene la clase Mage_Catalog_Block_Product_View_Options_Type_Select
en su propio módulo Marius_Test .
Entonces necesitaría esta entrada en su 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
en app \ code \ local \ WR \ EPO \ Block \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php . Lo intenté así: codepen.io/anon/pen/WYOqBr