1

如果我们有两个名称相同但名称空间不同的模块,它们会冲突吗?

例如:

  1. A_Module_Helper_Data

  2. B_Module_Helper_Data

现在发生的事情是,当我调用它时,Mage::helper('module')->someMethod();它说 在方法存在时someMethod未找到。A_Module_Helper_DataB_Module_Helper_Data

magento 如何区分这一点?什么是可能的解决方案?

4

2 回答 2

3

这是您在 config.xml 中注册模块的方式。特别是,在 helper 示例中,请查看 GiftMessage 模块的 config.xml 的这一部分:

<helpers>
    <giftmessage>
    <class>Mage_GiftMessage_Helper</class>
    </giftmessage>
</helpers>

注意这<giftmessage>部分——这就是你要找的钩子。因此,当您键入$this->helper('giftmessage')时,它将查找在该键下注册的第一个(或最后一个,并不重要)的类。

于 2013-05-23T10:39:47.353 回答
1

在不同的命名空间中运行 2 个具有相同名称的模块是完全可能的,但你必须小心。

就像 Netismine 所说,最重要的是 2 个模块的 config.xml。

如果您的 2 个模块共享相同的帮助程序 xml 标识符节点(例如<giftmessage>)并且您不进行任何重写:magento 将加载最后一个模块的帮助程序(请记住,magento 按字母顺序和/或依赖关系合并其所有 XML 文件订单)。

对于您的情况,您有 2 个解决方案可以确保调用正确的助手:

  • 模块 B 重写模块 A(<rewrite>模块 B config.xml + PHP 类 B 扩展 PHP 类 A 中的机制)以获取giftmessage帮助层标识符的“所有权”

  • 使用不同的标识符注册模块 B 辅助层:(例如<b_giftmessage>)并在您的 PHP 代码中使用它

希望这可以帮助

于 2013-05-23T12:03:59.533 回答