在这一章节中。我们来了解 Magento 中的事件分发机制 Mage::dispatchEvent()

在创建自己的模块时, Event 事件的分发将会变成十分实用且有效

以个人的经验。 事件的分发使用频率应该高于对类的重写(overriding)
为什么这么说呢, 当有多个模块的时候, 重写同一个类(class)时,那它们互相将会有冲突。 仅仅有一个模块将会正常工作, 可是假设你使用事件的话。 那么多个模块都能够非常轻松的去调用它

Magento 中的事件也是依据观察者(Observer)设计模式
它是这样工作的, 在 Magento 核心代码中, 很多地方都分发了事件。 每个事件都有自己唯一的名字和其它相关的參数, 在我们自己的模块中, 相同也能够调用这些事件, 当 Magento 分发这些事件的时候, 在我们自己模块中的一个方法将会被触发, 在这种方法中我们能够进行相关的操作

Magento 调用 Mage::dispatchEvent() 方法来分发事件。 你全盘搜索一下的话,会发现 Magento 代码中非常多地方都调用了

如今我们来拿 Mage_Checkout_Model_Type_Onepage 类中的 saveOrder 方法来举例

Mage::dispatchEvent(
'checkout_type_onepage_save_order_after',
array(
'order'=> $order,
'quote'=> $this->getQuote()
)
);

每个事件都有自己的名字和相关參数

在上述方法中, 'checkout_type_onepage_save_order_after' 就是自己的名字, array('order'=>$order, 'quote'=>$this->getQuote()) 就是相关參数

在我们的模块中假设想调用(subscribe)或监听(listen)这个事件的时候, 须要加入例如以下代码至 config.xml 文件里

<events>
<checkout_type_onepage_save_order_after><!-- 事件的名字 -->
<observers>
<save_after><!-- 不论什么唯一的标示符 -->
<type>singleton</type>
<class>Excellence_Test_Model_Observer</class><!-- 我们自己的类(class) -->
<method>saveOrderAfter</method><!-- 方法名 -->
</save_after>
</observers>
</checkout_type_onepage_save_order_after>
</events>

如今在我们自己模块的 Model 目录中建立一个 Observer.php 文件, 随后定义一个方法名为: saveOrderAfter()

classExcellence_Test_Model_Observer
{
publicfunction saveOrderAfter($evt){
$order= $evt->getOrder();//这样就能获得到在 Mage::dispatchEvent() 方法中传的參数
$quote= $evt->getQuote();//这样就能获得到在 Mage::dispatchEvent() 方法中传的參数
/*
....
这里能够运行相关操作
发送邮件
等等...
....
*/
}
}

另外,每当一个模块(Model)运行完保存之后,这两个事件会被触发:

Mage::dispatchEvent(
'model_save_before',
array('object'=> $this)
); Mage::dispatchEvent(
'model_save_after',
array('object'=>$this)
);

Magento 模块开发之DispatchEvent的更多相关文章

  1. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  2. Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”

    整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...

  3. Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”

    项目开发从来就不是一个简单的问题.更难的问题是维护其他人开发的项目,并且要修改bug.如果原系统有重大问题还需要重构. 怎么重构系统不是本文探讨的问题,但是重构后如何上线部署和本文关系密切.这个大家可 ...

  4. Cocos2d-x 3.x游戏开发之旅

    Cocos2d-x 3.x游戏开发之旅 钟迪龙 著   ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...

  5. 产品管理开发之Git工作流和分支规范推荐

    前言 无论是开源项目还是内部项目,使用Git都是大势所趋,尤其是在产品管理这块,使用Git大大提高了开发效率和产品的交付频率.本篇,针对Git的工作流和分支使用,进行了一些推荐. 目录 1     产 ...

  6. Python3.6编译安装以及python开发之virtualenv与virtualenvwrapper

    Python3.6编译安装 下载python源码包 先到安装目录 cd /opt 下载源码包 wget https://www.python.org/ftp/python/3.6.2/Python-3 ...

  7. Android开发之JNI(一)--HelloWorld及遇到的错误解析

    Android开发之JNI(一)--HelloWorld及遇到的错误解析 1.NDK环境搭建    參考http://blog.csdn.net/xiaoliouc/article/details/8 ...

  8. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  9. Android混合开发之WebViewJavascriptBridge实现JS与java安全交互

    前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...

随机推荐

  1. Vue实战之插件 sweetalert 的使用

    安装npm install sweetalert2@7.15.1 --save 封装 sweetalertimport swal from 'sweetalert2' export default { ...

  2. 【Linux】 JDK安装及配置 (linux-tar.gz版)

    安装环境:Linux(CentOS 7 64位 版) JDK安装:tar.gz为解压后就可以使用的版本,这里使用jdk-8u211-linux-x64.tar.gz版,安装到/usr/java/(us ...

  3. mac系统,鼠标移动太慢

    to check your speed: defaults read -g com.apple.mouse.scaling to set your speed defaults write -g co ...

  4. ThinkPHP---TP功能类之验证码

    [一]验证码 验证码全称:captcha(全自动识别机器与人类的图灵测试),简单理解就是区分当前操作是人执行的还是机器执行的 常见验证码分3种:页面上图片形式.短信验证码(邮箱验证可以归类到短信验证码 ...

  5. Getting start with dbus in systemd (03) - sd-bus.h 使用例子 (systemd version>=221)

    sd-bus.h 例子 注意: sd-dbus 是systemd提供的lib,但是这个lib,只有在systemd>v221版本后才可以使用,centos 219版本太低,所以不能使用. 参考: ...

  6. java计算两地距离(公里)

    //目标经度,目标纬度,自己经度,自己纬度 public static double getDistance(double lon1, double lat1, double lon2, double ...

  7. TWaver推智能手表挑战华为苹果

    2015年的春节刚过,苹果.华为.三星就紧锣密鼓的发布了各自新产品.华为.苹果的智能手表最吸引眼球.TWaver也不甘示弱,立刻连夜推出了更像传统奢侈豪华手表的TWaver Watch,予以反击.看来 ...

  8. Xcode5编译ffmpeg

    命令行安装FFmpeg:git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg(或:到https://github.com/gabriel/ffmpeg ...

  9. iOS中NSAttributedString的使用--对关键字着色,以及处理html实例

    1,最近项目中用到了一个功能,一个很好的功能.就是用户在搜索的时候,搜索结果出来后对你输入的关键字进行红色标记.这样用户就很请楚的看到自己输入什么后会出现什么样子的结果.还有一个功能是,现在有一段文字 ...

  10. Struts2学习笔记:DMI,多个配置文件,默认Action,后缀

    动态方法调用有三种方法: 1.同一Action多次映射,每个action标签的method对应要调用的方法. 当要调用的方法多了就会增加struts.xml文件的复杂性. 2.struts.Dynam ...