我知道Magento有一个类似挂钩的系统,称为事件。是否有人有一个完整的列表或脚本可以用来确定可以调用哪些事件的脚本?

有帮助吗?

解决方案

没有所有Magento事件的列表,因为大多数事件都是动态命名的。

如果您问我,知道这些关键事件(以及后果)是一个很好的起点(尼克的清单旁边):

从mage_core_model_abstract延长的每个对象都围绕加载,保存和删除的许多事件:

app/code/core/Mage/Core/Model/Abstract.php:255
Mage::dispatchEvent($this->_eventPrefix.'_load_before', $params);
// e.g. sales_order_load_before, checkout_cart_load_before

例如,加载对象后添加支票

app/code/core/Mage/Core/Model/Abstract.php:267
Mage::dispatchEvent($this->_eventPrefix.'_load_after', $this->_getEventData());
// e.g. cms_page_load_after

在保存之前向对象添加其他数据

app/code/core/Mage/Core/Model/Abstract.php:391
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
// e.g. catalog_product_save_before

保存“父母”后保存其他模型

app/code/core/Mage/Core/Model/Abstract.php:466  
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
// e.g. catalogrule_rule_save_after

在删除模型之前清理

app/code/core/Mage/Core/Model/Abstract.php:501
Mage::dispatchEvent($this->_eventPrefix.'_delete_before', $this->_getEventData());
// e.g. store_delete_before

在删除模型之前清理 - 还是之后?您仍在交易中!

app/code/core/Mage/Core/Model/Abstract.php:529
Mage::dispatchEvent($this->_eventPrefix.'_delete_after', $this->_getEventData());
// e.g. website_delete_after

如果您想确保删除该实体

app/code/core/Mage/Core/Model/Abstract.php:541
Mage::dispatchEvent($this->_eventPrefix.'_delete_commit_after', $this->_getEventData());
// e.g. customer_delete_commit_after

从mage_core_model_resource_db_collection_abstract扩展的集合也有两个通用事件:

例如:更改SQL以加载集合:

app/code/core/Mage/Core/Model/Resource/Db/Collection/Abstract.php:588
Mage::dispatchEvent($this->_eventPrefix.'_load_before', array(
    $this->_eventObject => $this
));
// e.g. sales_order_status_history_collection_load_before

例如:为对象添加其他数据:

app/code/core/Mage/Core/Model/Resource/Db/Collection/Abstract.php:637
Mage::dispatchEvent($this->_eventPrefix.'_load_after', array(
    $this->_eventObject => $this
));
// e.g. sales_order_shipment_collection_load_after

其他提示

做血腥 grep 'Mage::dispatchEvent' app/ -rsn 这将为您提供特定安装事件的列表,因为事件列表可能会根据安装的洋红色版本,自定义和扩展名而有所不同。

我将其用作不错的备忘单 http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/. 。它具有1.7中可以调用的所有事件。

我知道这个问题已经回答,我只是在这里添加我的路:

  • 我准备要在浏览器中观察的页面
  • 我打开app/mage.php
  • 为了 public static function dispatchEvent (ln:〜446)在开始时我添加//Mage::log($name, null, 'events.log', true);
  • 不按那一行的话进行注释,
  • 刷新页面
  • 再次评论那条线

然后,您打开var/log/events.log(〜40kb),仅在该页面上查看很多事件! :)

答案已经被接受,但无论如何我的答案都会在未来的情况下出现:

如果您想查看Magento拥有的事件列表,则有3个选项:

1) Google为此,有很多人汇编了Magento活动列表

2) 创建一个挂在 controller_action_predispatch 事件是在调用任何其他事件之前被调用的事件。在此模块内部,您可以记录一些被派遣的事件:

在config.xml上添加以下内容

<events>
    <controller_action_postdispatch>
        <observers>
            <controller_action_after>
                <class>yourmodule/observer</class>
                <method>hookToControllerActionPostDispatch</method>
            </controller_action_after>
        </observers>
    </controller_action_postdispatch>
</events>

在yourmodule/型号/观察者内部:

public function hookToControllerActionPostDispatch($observer) {
    Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}

以上将记录派遣的每个事件...

3) 如果您有SSH访问权限,则可以运行以下命令以获取所有事件(及其派遣的文件)的概述:

cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/

我正在使用Magento开发人员工具栏,该工具栏具有显示可以在加载页面上观察到的事件的功能。

我在Magento的Core Mage模块上做了一个GREP,并遵守了一个清单,

详尽的洋红色事件清单

PS如所指出的,可能包含在Magento的弃用功能内部的事件,因此请在实现之前检查文件和行引用。

开放建议!

grep "::dispatchEvent" -R * | sort -u

grep "eventPrefix" -R * | sort -u

先前列出的GREP命令将渲染重复(很多),并且不涵盖要理解动态生成的事件名称所需的事件前缀列表。这些命令仅具有唯一值的两个列表。您可以像其他GREP答案一样添加-n标志,并获得我想的行号。但是问题并没有问他们在代码中都在哪里。 〜_〜

您可以在单个链接上找到所有后端 +前端事件的列表

http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/reference/magento_events

如果有人需要更新列表,我正在尝试保持最新信息:

https://gist.github.com/digitalpianism/D8157C6B492238AF2ED7809E5E3A134E

许可以下: CC-BY-SA归因
scroll top