我正在使用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;声明,所以我不确定在我缺少的节点中该怎么做。
提前感谢您的帮助。
答案 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
以调用类。
您需要做的是将这个确切的配置复制到您的模块配置 - 指定您的块类名 - 和(重要!)确保发生以下情况:
如何确保在社区模块之后加载模块配置?只需在 app / etc / modules 中打开社区模块的声明文件,注意<modules>
节点下的节点名称(在上面的示例中,几乎肯定是Community_Module
),然后在您的模块声明文件中(也在 app / etc / modules 中),将其添加到您的模块声明中:
<depends>
<Community_Module /> <!-- e.g. -->
</depends>
HTH