【问题标题】:what will happen if overriding a class in my module used by another module如果覆盖另一个模块使用的模块中的类会发生什么
【发布时间】:2026-01-03 06:15:01
【问题描述】:

我正在开发一个模块,我需要覆盖一个块文件以添加新功能。我知道如何覆盖 blocksmodelcontrollers,但我想知道如果使用我扩展的类会发生什么由另一个模块类?

以上场景如下:
在我的模块 config.xml 中,我将块文件覆盖为:

<blocks>
    <checkout>
        <rewrite>
            <cart_shipping>Company_Module_Block_Cart_Shipping</cart_shipping>
        </rewrite>
    </checkout>
</blocks>

并覆盖一个方法getEstimateRates()

但还有另一个模块的块文件扩展为Mage_Checkout_Block_Cart_Shipping。我的问题是——

“那个类能看到我的模块中被覆盖的类所做的更改吗?”

“我必须覆盖其他模块的块文件吗?”

【问题讨论】:

  • 这可能会有所帮助http://*.com/questions/23884838/how-to-override-community-block-module-with-php-file-in-magento/23885156#23885156
  • 这是您不应该覆盖而是使用事件的原因之一

标签: php magento overriding


【解决方案1】:

您的一个或另一个扩展块将不起作用。可以通过从其中一个扩展您的或另一个块来修复它。

例如,Company_Module_Block_Cart_Shipping 是您的块,Other_Module_Block_Cart_Shipping 是其他块。

如果Other_Module_Block_Cart_Shipping 是从核心扩展而来,您必须从Other_Module_Block_Cart_Shipping 扩展Company_Module_Block_Cart_Shipping

【讨论】:

    【解决方案2】:

    Magento 为所有已启用模块的 config.xml 创建一个 config.xml 树。

    首先加载Mage_All.xml, 那么所有 法师.*.xml 并按照字母顺序在其前面添加您的自定义模块 .xml。

    如果您在 etc/modules/module 定义 xml 中给出了依赖标签,则可以更改顺序。

    希望这能消除您的疑虑。

    【讨论】:

      最近更新 更多