我有一个模块可以监听一些事件。 它在我测试过的至少十几个安装中都能正常工作。
在特定安装上,我在Magento版本1.4.1.1上安装了它的客户端,它不起作用。 当我测试他的系统时,我手动触发事件,例如Mage :: dispatchEvent('..'),观察者会听到它们。
我应该研究什么?我不知道这可能是什么原因。
答案 0 :(得分:19)
这可能发生的原因有几个
您尝试收听的事件在您的Magento版本中不存在
有人攻击核心档案并意外删除了您正在侦听的事件
有人重写了方法
你的观察者设置不正确,Magento没有“看到”它。
您的观察者设置正确,但旧配置已缓存
我要调试的步骤是
确保merged global config包含您的事件配置。如果它没有清除你的缓存,直到它出现
下载新版本的源代码,并将app/code/core/
和lib/
与原始版本区分开来。从unix提示符中键入man diff
如果您还不熟悉它,请了解diff工具。
Grep(或ack)您正在尝试收听的活动的核心代码库。
暂时将日志记录代码添加到Mage::dispatchEvent
中的app/Mage.php
,以确保您正在寻找的事件真正解雇。
从Mage::dispatchEvent
开始,按照执行路径指向调用侦听器的位置,看看为什么Magento中的代码没有调用您的方法
第一次执行此操作将是一个时间接收器,因此请在核心Magento系统代码中记录发生的位置。这样,下次你调试类似的问题时,它会更快(如果你真的想要很好,你可以分享你在这里,你的博客或Magento维基上找到的东西)
答案 1 :(得分:0)
在我recently discovered时,模块可以在Magento中显示为已启用,但如果模块的文件夹名称以小写字母开头,则实际上不起作用。也许这将允许其他人在将来保留他们的头发。