1

是否有可以收听的所有事件的完整列表?

如果此列表不存在,调试以获取所有事件的最佳方法是什么?

4

4 回答 4

7

你永远找不到完整的清单。但是,如果您访问 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 文件将在短时间内变得巨大。

于 2012-11-05T18:19:48.803 回答
4

看看事件列表@

或者

要在您的开发环境中记录特定页面的所有事件,您可以添加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

阅读更多 @

于 2012-11-05T17:53:21.600 回答
1

作为练习,我编写了一个 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 或使用我的脚本手动生成此列表。

干杯!

于 2013-10-18T05:33:01.747 回答
0

一般的意思是为您感兴趣的任何特定事件设置观察者

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  

您可以可视化任何测试操作的可能挂钩(单击按钮并检查您的日志)

于 2014-05-13T16:33:49.163 回答