如果我们有两个名称相同但命名空间不同的模块,它们会发生冲突吗?
例如:
A_Module_Helper_Data
B_Module_Helper_Data
现在发生的事情是,当我打电话给Mage::helper('module')->someMethod();
时,它说
someMethod
中的方法存在时,A_Module_Helper_Data
中找不到B_Module_Helper_Data
。
magento如何区分这个? 什么是可能的解决方案?
答案 0 :(得分:3)
这是您在config.xml中注册模块的方式。特别是在helper示例中,请查看GiftMessage模块的config.xml的这一部分:
<helpers>
<giftmessage>
<class>Mage_GiftMessage_Helper</class>
</giftmessage>
</helpers>
注意<giftmessage>
部分 - 这是你正在寻找的钩子。因此,当您键入$this->helper('giftmessage')
时,它将查找在该键下注册的第一个(或最后一个,并不重要)的类。
答案 1 :(得分:1)
完全可以在不同的命名空间中运行具有相同名称的2个模块,但您必须小心。
就像Netismine所说的那样,2个模块的config.xml是最重要的。
如果你的2个模块共享相同的helper xml标识符节点(例如<giftmessage>
)并且你没有做任何重写:magento将加载最后一个模块的帮助器(请记住,magento合并所有的XML)按字母顺序和/或依赖订单的文件。)
对于您的情况,您有2个解决方案,以确保呼叫正确的帮助:
模块B重写模块A(模块B中的<rewrite>
机制config.xml + PHP类B扩展PHP类A)以获取giftmessage
辅助层的“所有权”标识符
使用不同的标识符注册模块B辅助层:(例如<b_giftmessage>
)并在PHP代码中使用它
希望这有帮助