Todo bloco ou grupo de blocos é declarado no config.xml
arquivo de um módulo como este (dentro da <global>
tag).
Aqui está um exemplo do 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>
Isso significa que um bloco pode ser instanciado usando o alias catalog/class_name_here
onde class_name_here
está o restante do caminho da classe começando no prefixo.
Isso significa catalog/class_name_here
que será mapeado por padrão para Mage_Catalog_Block_Class_Name_Here
.
Para reescrever um bloco, você precisa criar um módulo que dependa do módulo que você está tentando alterar ( Magento_Catalog
) no meu exemplo.
E você precisa adicionar isso config.xml
abaixo da <global>
tag.
<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>
Em seguida, crie a classe YourNamespace_YourModule_Block_Your_New_Class_Here
(seguindo a estrutura de pastas do ZF) e faça com que essa classe estenda a classe original.
class YourNamespace_YourModule_Block_Your_New_Class_Here extends Mage_Catalog_Block_Class_Name_Here
{
//your awesome code here
}
Quando terminar, desative a compilação e ative-a novamente (se necessário) e limpe o cache.
Isso não funcionará para blocos abstratos.
Funciona apenas para classes instanciadas.
Exemplo
Vamos supor que você queira reescrever o arquivo app \ code \ core \ Mage \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php que possui a classe Mage_Catalog_Block_Product_View_Options_Type_Select
em seu próprio módulo Marius_Test .
Então você precisaria desta entrada no seu 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
em app \ code \ local \ WR \ EPO \ Block \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php . Eu tentei assim: codepen.io/anon/pen/WYOqBr