是否有可以收听的所有事件的完整列表?
如果此列表不存在,调试以获取所有事件的最佳方法是什么?
你永远找不到完整的清单。但是,如果您访问 app/Mage.php,您可以在函数“dispatchEvent()”中放入一些调试代码,并随时记录所有事件。
$params = array();
foreach (array_keys($data) as $key) {
if (is_object($data[$key])) {
$params[] = $key.' ('.get_class($data[$key]).')';
} else {
$params[] = $key.' ('.gettype($data[$key]).')';
}
}
Mage::log('event_name:'.$name.',event_passed_keys:'.implode('|',$params),null,'events.log',true);
然后使用一些 excel 向导,您可以将它们解析为所有事件名称和传递给它的参数的列表。
许多编译列表甚至执行上面所示的 grep 的问题是许多事件是动态创建的。这使您可以辨别有哪些未列出的事件。
确保注释掉调试代码或 events.log 文件将在短时间内变得巨大。
看看事件列表@
或者
要在您的开发环境中记录特定页面的所有事件,您可以添加Mage::log($eventName);
在 /app/code/core/Mage/Core/Model/App.php
public function dispatchEvent($eventName, $args){
Mage::log($eventName);
....
或者
grep -r Mage::dispatchEvent /path/to/your/Magento/* > events.txt
阅读更多 @
作为练习,我编写了一个 Bash 脚本来生成粗略的事件列表(它实际上充当 grep 的包装器,带有一些开关以提供上下文和可用参数)。
我已使用此脚本为 1.3.3.0 到 1.8.0.0 版本的默认 Magento 安装生成事件列表,代码可在 GitHub 上找到:
https://github.com/Marko-M/magento-events-list/
事件列表可在此处获得:
https://github.com/Marko-M/magento-events-list/tree/master/magento-outofthebox
以及我博客上的后续文章:
http://www.techytalk.info/bash-script-to-generate-list-of-events-for-magento-installation/
请注意,由于许多事件名称是动态生成的,因此这些列表永远不会完整。
由于您的项目可能有扩展,并且它们会发送自己的事件,因此最好通过 grep 或使用我的脚本手动生成此列表。
干杯!
一般的意思是为您感兴趣的任何特定事件设置观察者
见https://magento.stackexchange.com/questions/314/how-to-know-the-magento-event-that-we-want-to-hook
在 Logevent 模块中,config.xml
0.1
Maticode_Logevent_Model
<controller_action_predispatch>
<observers>
<Logevent>
<type>singleton</type>
<class>Logevent/observer</class>
<method>controller_action_predispatch</method>
</Logevent>
</observers>
</controller_action_predispatch>
和模型/observer.php
<?php
类 Maticode_Logevent_Model_Observer { public function controller_action_predispatch($observer) { Mage::log ( $observer->getEvent ()->getControllerAction ()->getFullActionName (),null, 'eventlog.log' ); }
}
这样,在
var/log/eventlog.log file
您可以可视化任何测试操作的可能挂钩(单击按钮并检查您的日志)