Каждый блок или группа блоков объявляется в config.xml
файле такого модуля (внутри <global>
тега).
Вот пример из каталога модуля
<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>
Это означает, что для создания экземпляра блока можно использовать псевдоним, catalog/class_name_here
где class_name_here
находится остальная часть пути к классу, начиная с префикса.
Это означает catalog/class_name_here
, что по умолчанию будет отображаться на Mage_Catalog_Block_Class_Name_Here
.
Чтобы переписать блок, вам нужно создать модуль, который зависит от модуля, который вы пытаетесь изменить ( Magento_Catalog
) в моем примере.
И вам нужно добавить это в config.xml
под <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>
Затем создайте класс YourNamespace_YourModule_Block_Your_New_Class_Here
(следуя структуре папок ZF) и заставьте этот класс расширить исходный класс.
class YourNamespace_YourModule_Block_Your_New_Class_Here extends Mage_Catalog_Block_Class_Name_Here
{
//your awesome code here
}
Когда вы закончите, отключите компиляцию и включите ее снова (при необходимости) и очистите кеш.
Это не будет работать для абстрактных блоков.
Это работает только для классов, которые создаются.
пример
Предположим, что вы хотите переписать файл app \ code \ core \ Mage \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php, который имеет класс Mage_Catalog_Block_Product_View_Options_Type_Select
в вашем собственном модуле Marius_Test .
Тогда вам понадобится эта запись в вашем 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
в app \ code \ local \ WR \ EPO \ Block \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php . Я попробовал это так: codepen.io/anon/pen/WYOqBr