Magento重写社区codePool重写

时间:2012-04-27 15:52:47

标签: magento

我正在使用Magento,我想重写Mage_Catalog_Block_Product_Price,但社区codePool模块已经重写了该块。我知道在我的xml中,我需要

<config>
    <global>
        <blocks>
            <WHAT_GOES_HERE?>
                <rewrite>
                    <product_price>Display_Price_Block_Product_Price</product_price>
                </rewrite>
            </WHAT_GOES_HERE?>
        </blocks>

但是我不确定应该将什么放入classgroup节点(我标记为WHAT_GOES_HERE?)社区模块没有&lt; [classgroup]&gt;声明,所以我不确定在我缺少的节点中该怎么做。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

所有配置XML都以一种方式合并到一个DOM结构中,这意味着碰撞xpath将覆盖其文本值。一个例子:

此社区模块当前正在通过配置重写已解析的类名:

<config>
    <global>
        <blocks>
            <catalog>
                <rewrite>
                    <product_price>Community_Module_Block_Example_Price</product_price>
                </rewrite>
            </catalog>
        </blocks>
    </global>
</config>

框架使用Mage_Core_Model_Layout::createBlock()调用块类,在这种情况下,参数为catalog/product_price(注意这两个字符串如何映射到配置)。社区模块正在更改根据此信息计算的类名,并将其指向指定的类名,即Community_Module_Block_Example_Price。然后将该类名提供给PHP new以调用类。

您需要做的是将这个确切的配置复制到您的模块配置 - 指定您的块类名 - (重要!)确保发生以下情况:

  1. 在社区模块的配置
  2. 之后加载了您的配置
  3. 您的班级来自社区模块的课程。
  4. 如何确保在社区模块之后加载模块配置?只需在 app / etc / modules 中打开社区模块的声明文件,注意<modules>节点下的节点名称(在上面的示例中,几乎肯定是Community_Module),然后在您的模块声明文件中(也在 app / etc / modules 中),将其添加到您的模块声明中:

    <depends>
        <Community_Module /> <!-- e.g. -->
    </depends>
    

    HTH