我会假设每个模型保存后都会发生一个事件。这是如何格式化的,有没有办法记录所有这些事件?
如果您要扩展的模块中没有声明标准事件,这将很有用。
我认为最好的答案是基于您提供的所有信息。
为了使事件对该模型唯一,$this->_eventPrefix 必须对该模型唯一
查找您正在寻找的特定事件
如果您使用的是 IDE,这应该会容易得多,但您也可以使用 grep 等实用程序。
_load_before
_load_after
_save_before
_save_after
_save_commit_after
_delete_before
_delete_after
_delete_commit_after
_清除
要记录所有事件,请转到 app/Mage.php 第 446 行并添加:
Mage::setIsDeveloperMode(true);
Mage::log($name);
看看Mage_Core_Model_Abstract::afterCommitCallback - 它有一个通用事件和一个由正在保存的特定模型的前缀调度的事件。
/**
* Callback function which called after transaction commit in resource model
*
* @return Mage_Core_Model_Abstract
*/
public function afterCommitCallback()
{
Mage::dispatchEvent('model_save_commit_after', array('object'=>$this));
Mage::dispatchEvent($this->_eventPrefix.'_save_commit_after', $this->_getEventData());
return $this;
}
不管你想要这个还是
/**
* Processing object after save data
*
* @return Mage_Core_Model_Abstract
*/
protected function _afterSave()
{
$this->cleanModelCache();
Mage::dispatchEvent('model_save_after', array('object'=>$this));
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
return $this;
}
取决于您在运行事件处理程序时是否关心数据是否已实际写入数据库。
当 Magento 看到对它的调用时Mage::dispatchEvent
,它将调用为该特定事件名称注册的任何公共模型类。因此,查找事件的真正位置是在您感兴趣的模块/模型的 config.xml 中。xml 不太可能以编程方式生成,因此您不必大惊小怪地猜测_eventPrefix
值。您知道所需的事件后缀,因此只需在配置中查找名称以该后缀结尾的事件即可。
如果您有安装的商店,您可以使用n98-magerun搜索 config.xml。(它有一个 config:get 命令可用于搜索,但我更喜欢config:dump
文件,然后使用 xml 解析器和 xpath 搜索结果。)
我总是把日志放进app/Mage.php
去dispatchEvent() method
...
Mage::log($name, array_keys($event_data));
...
然后我在需要应用自定义事件操作的浏览器中刷新页面,然后查看 system.log 以查看我的页面上发生了哪些事件。
只需在 config.xml 中添加如下内容:
<global>
<events>
<catalog_entity_attribute_save_commit_after>
<observers>
<yourextension_save_commit_after_observer>
<type>singleton</type>
<class>yourextension/save_commit_after_observer</class>
<method>yourMethod</method>
</yourextension_save_commit_after_observer>
</observers>
</catalog_entity_attribute_save_commit_after>
</events>
</global>
这是正确的。每次模型保存后都有一个_save_before和_save_after事件,如catalog_product_before_save、catalog_product_after_save、customer_address_before_save、customer_address_after_save等。
您可以参考下面的此链接以获取有关如何使用它的更完整信息以及 Magento 中所有事件的完整列表。
来源:http ://www.vjtemplates.com/blog/magento/events-and-observers