clo*_*eek 11 events coding-style exploratory magento
有时在寻找方便的事件时我会做一些探索式编程...
Mage::dispatchEvent使用此额外行修改:
Mage::log($name.'('.implode(',', array_keys($data)).')');
Run Code Online (Sandbox Code Playgroud)标记一个起点,我知道我不能早点赶上:
Mage::log(__METHOD__.'::START');
Run Code Online (Sandbox Code Playgroud)标记一个我不想在以后发现的终点:
Mage::log(__METHOD__.'::STOP');
Run Code Online (Sandbox Code Playgroud)观察日志并逐步浏览网站(例如,订单提交,正在调查的内容)
tailf var/log/system.log
Run Code Online (Sandbox Code Playgroud)这给了我一个充满无聊数据和传递对象名称的屏幕.除了START和STOP我通常不会寻找任何特定的东西来grep它,我必须依靠我的经验来确定可能的引导点.例如,在下订单时我知道某处通常有"报价",或者可以通过"付款"对象获得对订单的引用,反之亦然.
然后我必须记住删除我的标记(使用任何类型的版本时都不那么难).
您使用什么方法来查找事件?你能不修改核心代码吗?
如果我正在寻找特定事件,通常我会在Mage.php中编辑dispatchEvent()并将其添加到顶部(我认为这些是日志的正确参数,但是从内存写入):
Mage::log( $name, 1, 'events.txt' );
Run Code Online (Sandbox Code Playgroud)
然后我将刷新页面,注释掉该行以防止文件中的额外事件,然后查看我的events.txt文件以查看为该页面加载触发的所有事件.
这确实是一种hacky,但我发现它有助于查找带有变量的事件作为其名称的一部分.
截至1.2,事件列表是在Magento Wiki上策划的.你可以在这里找到该列表:
http://www.magentocommerce.com/wiki/_media/magento_events_v1.2.0.2.xls
但是,从那时起,各种事件都被弃用了.这里有一个列表,但它只是1.4的当前列表
http://masteringmagento.com/2010/06/events-list-in-magento-community-1-4/
如果你很方便,你可以grep -R dispatchEvent在你的Magento工作目录中执行并解析调度调用的缺乏.这些是您特定版本中所有Magento事件的实际定义.
编辑2013年2月14日:
这份名单已有几年历史,不再有效.我建议您使用以下资源,因为它不仅是一个更好的答案,而且为您提供了许多寻找更好的事件挂钩的示例和来源.
https://magento.stackexchange.com/a/167/336