Magento阻止两个不同模块的覆盖

时间:2012-02-16 13:07:55

标签: magento override block

您好我在覆盖magento核心块时遇到了一些问题。在我的模块中,我需要覆盖Mage_Catalog_Block_Navigation

<blocks>
  <catalog>
    <rewrite>
            <navigation>Mycompany_Mymodule_Catalog_Block_Navigation</navigation>
        </rewrite>
  </catalog>
</blocks>

但是已经被另一家公司的另一个magento扩展覆盖:

<blocks>
  <catalog>
    <rewrite>
        <navigation>Othercompany_Othermodule_Block_Navigation</navigation>
    </rewrite>
  </catalog>
</blocks>

这两个扩展都会覆盖不同的方法,并且它们彼此不相关,但magento会读取第二个公司的覆盖而不是我的。我不想使用模块依赖项。有没有办法不破坏这两个扩展功能。

2 个答案:

答案 0 :(得分:7)

是的,您必须决定哪一个正式覆盖核心Block。让那个继承没有进行覆盖的那个,并让那个继承核心的那个。

My_Custom_Block extends Other_Custom_Block
Other_Custom_Block extends Mage_Core_Block
Mage_Core_Block extends Whatever_Magento_Wants

编辑config.xml文件,以便只有My_Custom_Block覆盖核心块。

修改 这是您需要的XML:

<blocks>
  <catalog>
    <rewrite>
            <navigation>Mycompany_Mymodule_Catalog_Block_Navigation</navigation>
        </rewrite>
  </catalog>
</blocks>

答案 1 :(得分:0)

Thx Max。 我认为,就像你的例子一样,“My_Custom_Block”应该是最后一个分层类,所以你不要触及“Other_Custom_Block”类中的任何东西。

然后你只需要在“Other Company”config.xml中评论重写规则。