如果我们有两个名称相同但名称空间不同的模块,它们会冲突吗?
例如:
A_Module_Helper_Data
B_Module_Helper_Data
现在发生的事情是,当我调用它时,Mage::helper('module')->someMethod();
它说
在方法存在时someMethod
未找到。A_Module_Helper_Data
B_Module_Helper_Data
magento 如何区分这一点?什么是可能的解决方案?
这是您在 config.xml 中注册模块的方式。特别是,在 helper 示例中,请查看 GiftMessage 模块的 config.xml 的这一部分:
<helpers>
<giftmessage>
<class>Mage_GiftMessage_Helper</class>
</giftmessage>
</helpers>
注意这<giftmessage>
部分——这就是你要找的钩子。因此,当您键入$this->helper('giftmessage')
时,它将查找在该键下注册的第一个(或最后一个,并不重要)的类。
在不同的命名空间中运行 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 代码中使用它
希望这可以帮助