【问题标题】:Events not firing/or observer not working in magento事件未触发/观察者未在 magento 中工作
【发布时间】:2011-04-24 21:30:38
【问题描述】:

我有一个监听一些事件的模块。 它在我测试过的至少十几个安装中运行良好。

在特定安装上,我安装了它的客户端,在 Magento 版本 1.4.1.1 上,它不起作用。 当我测试他的系统并手动触发事件时,例如 Mage::dispatchEvent('..') 观察者确实会监听它们。

我应该调查什么?我不知道这可能是什么原因。

【问题讨论】:

  • 您能否举一个似乎错过的事件的示例以供参考?
  • 例如事件 checkout_cart_product_add_after
  • 我编写了一个包含工作代码的教程,位于 [这里][1]。它是为 v1.7 编写的,但除了 XML 文件结构涉及更多这一事实之外,我看不出它不向后兼容的原因。 [1]:z900collector.wordpress.com/magento/magento-events

标签: debugging events magento observer-pattern


【解决方案1】:

正如我recently discovered 一样,如果模块的文件夹名称以小写字母开头,模块可以在 Magento 中显示为启用但实际上不起作用。也许这会让其他人在未来保留他们的头发。

【讨论】:

    【解决方案2】:

    发生这种情况的原因有几个

    1. 您尝试监听的事件在您的 Magento 版本中不存在

    2. 有人入侵了核心文件并意外删除了您正在监听的事件

    3. 有人重写了方法

    4. 您的观察者设置不正确,Magento 没有“看到”它。

    5. 您的观察者设置正确,但旧配置被缓存

    我要调试的步骤是

    1. 确保merged global config 具有您的事件配置。如果它在出现之前没有清除你的缓存

    2. 下载新版本的源代码并将您的app/code/core/lib/ 与原始版本进行比较。在 unix 提示符下键入 man diff,如果您还不熟悉 diff 工具,您可以了解它。

    3. Grep(或ack)您尝试侦听的事件的核心代码库。

    4. 暂时将日志代码添加到app/Mage.php 中的Mage::dispatchEvent,以确保您要查找的事件真正触发。

    5. Mage::dispatchEvent开始,沿着执行路径一直到调用监听器的地方,看看为什么Magento中的代码没有调用你的方法

    您第一次这样做会耗费时间,因此请在此过程中记下核心 Magento 系统代码中发生的想法。这样,下次您调试类似问题时,它会更快(如果您真的想变得更好,可以在此处、博客或 Magento wiki 中分享您发现的内容)

    【讨论】:

    • 原因不能是 1 或 2,因为手动调度什么也没做。
    • 感谢艾伦的回答。你的忠实粉丝。我没有完全访问magento源的权限,因为它位于远程客户端。但是,我可以更改模块目录中的文件(访问受限)。我确实怀疑原因 2 或 3。缓存刷新是一个明智的选择。我没有想到。稍后会发布更新。
    • @clockworkgeek 它可以是 1 或 2,它确实是手动调度的,它不能是 2 和 3,因为它是手动触发的
    • 这里几乎可以肯定有些情况并非如此,但这是我的标准“事件侦听器不工作”调试技巧集。
    • 另一件要查找的事情是 config.xml 中的 标记是否在 标记或 标记内。这个细节会毁了你一整天:)
    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多