- 浏览: 80130 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
shuishui8310:
开公司了?
Magento学习课程继续 -
yanggaojiao:
对不起,很久没上这里了,在CMS->Home->D ...
Magento在首页自定制Block的方法 -
beautiful_good:
hi,你好我用的是magento 1.4.2.0版本的,请问如 ...
Magento在首页自定制Block的方法 -
as3291363:
太慢了....
Magento 1.4.1.0 的CMS太酷了 -
richardlovejob:
这个分享是在太及时了,谢谢。
Magento Events分析和使用实例与技巧
当你需要扩展Magento的核心的功能时有两个选择
- 重写(override)Magento的core classes
- 使用Magento的event-driven 机制
由于你只能重写一次Magento的core classes(如果你需要在多个module中重写相同core class就会出现错误),所以使用Magento的Event就大显神威了,它使得你的工作简便的简易方便。
Magento的event-driven机制中有两个非常重要的概念
- 分发(dispatch)一个事件(event)
- 捕捉(catch)一个事件(event)
Dispatching events
Magento中你需要调用 Mage::dispatchEvent(...) 就可以Dispatch一个Event, 例:
Mage::dispatchEvent('custom_event', array('object'=>$this));
该方法有两个参数,一个是事件的标识符(在所有事件中唯一)和一个关联数组。该数组的键值是一个data(Varien_Event_Observer 的一个实例),这个data将被执行事件的函数(即observer)进行处理并返回结果。
Catching events
捕捉事件比分发复杂一些,你必须使用一个已有的module或者新建一个module.这里新建一个,目录结构如下:
在该目录的config.xml文件中,我们新定义一个event observer,下面是参考示例(当然你可以定义不同scope的event observer):
<events> <custom_event> <!-- identifier of the event we want to catch --> <observers> <custom_event_handler> <!-- identifier of the event handler --> <type>model</type> <!-- class method call type; valid are model, object and singleton --> <class>baobazacustommodule/observer</class> <!-- observers class alias --> <method>customObserverAction</method> <!-- observer's method to be called --> <args></args> <!-- additional arguments passed to observer --> </custom_event_handler> </observers> </custom_event> </events>
上面的xml的配置有一个要注意的地方,就是<type />标签里的值可以是model,object,singleton,其中model和object是等效的且它们都将使用Mage::getModel(....)方法来进行初始化;而singleton将使用Mage::getSingleton(....)来初始化。此外,在Observer.php中就是相关的observer类的定义,该类既不需要继承其他类也不需要继承其他接口。这需要在customObserverAction方法的参数中传入Varien_Event_Observer类的一个实例,正是这个实例对象把dispatcher和event handler联系到一起。同时该实例对象也是继承于Varient_Object,所以拥有getter魔术方法,例:
class Baobaz_ACustomModule_Model_Observer { public function customObserverAction(Varien_Event_Observer $observer) { $object = $observer->getEvent()->getObject(); // we are taking the item with 'object' key from array passed to dispatcher $object->doSomething(); return $this; }
Default events
Magento实现了很多的events,详情参看Magento Events list.
此外, Mage_Core_Model_Abstract 类默认Dispatch了一些特殊的events:
event identifier | event parameters |
model_save_before | 'object'=>$this |
{_eventPrefix}_save_before | {_eventObject}=>$this |
model_save_after | 'object'=>$this |
{_eventPrefix}_save_after | {_eventObject}=>$this |
model_delete_before | 'object'=>$this |
{_eventPrefix}_delete_before | {_eventObject}=>$this |
model_delete_after | 'object'=>$this |
{_eventPrefix}_delete_after | {_eventObject}=>$this |
model_load_after | 'object'=>$this |
{_eventPrefix}_load_after | {_eventObject}=>$this |
{_eventPrefix} means the value of $_eventPrefix variable and {_eventObject} means the value of $_eventObject variable. All classes inheriting from Mage_Core_Model_Abstract should override these variables to create specific events being dispatched. For example for catalog cagetory these variables take following values: $_eventPrefix = 'catalog_category'; $_eventObject = 'category';
啊
下面是一些我个人对Magento event的理解和收集的event的资料
1.其实event的原理简单,就是它在你保存或读取数据之前对一些数据进行处理,这就是event的最终目的。所以必须得在dispatcher和event handler之间传递数据,同时该数据是以Varien_Event_Observer类形式存在,底层的实现Magento已经良好的封装,更多细节参考Mage_Core_Model_Abstract类中的一些方法(如protected _beforeSave() 和 protected _afterSave(),Event正是在这两方法里实现的)。
2.Magento中使用Event大致分为两步:
- Binding a function to an event
- Implement the observer(就是function中具体实现)
3.看下面的代码:
Mage::dispatchEvent('newsletter_customer_subscribed', array('customer'=>$customer, 'email'=>$email)); Mage::dispatchEvent('sales_order_status_change_after', array('order' => $order, 'status_before' => $status_before, 'status_after' => $status_after));
大家发现没有,可以在array中传递多个data(关联数组就是这样用的)。
- sale.rar (3.1 KB)
- 下载次数: 75
发表评论
-
Magento Admin Form表单元素大全
2012-09-30 12:08 996开发Magento后台的时候经常用到表单(Varien_Dat ... -
Magento A-Z和sitemap插件
2012-09-30 11:53 3709Iifire历经四个月多开发 ... -
Magento SQL绑定查询条件
2012-04-17 15:17 2609Magento从数据库中取数据时大多用的Collection, ... -
Magento站内信插件
2012-02-28 10:04 1426Magento Message Box即站内信组件,主要用于管 ... -
Magento內链外链插件
2012-02-21 10:26 1427给您的Magento网站添加关键词的链接,更多的内链和外链,更 ... -
Magento高级产品订阅
2012-02-21 08:54 2239基本功能介绍 产品订 ... -
Magento产品降价通知和到货通知插件
2012-02-09 16:04 01.客户可以在Magento前台页面订阅某个产品的降价通知(缺 ... -
Magento学习课程继续
2011-03-20 16:05 1464由于前一大段时间都比较忙,忽略了大家啦,好久没有更新内容了。打 ... -
Magento在首页自定制Block的方法
2010-09-19 14:27 2804Magento中想在首页显示一些自定制的BLock有很多中方法 ... -
magento获取相应的查询语句
2010-09-19 14:12 1055虽然Magento对数据库层封装得比较深,但是我们可以很轻松的 ... -
Magento 使用小技巧体现大智慧(Last things first)
2010-06-15 23:38 1220在我们的购物车Magento上线之前,有些小细节很容易被忽略。 ... -
从数据库设计看Magento系列教程(1)
2010-06-15 19:11 0TODO..... -
Magento CMS 应用实例
2010-06-14 19:03 4766下面是一些CMS的应用实例: 本文已移到 http:// ... -
Magento 1.4.1.0 的CMS太酷了
2010-06-14 02:49 1670哇,Magento 1.4.1.0版本已经出来了,今天安装使用 ... -
Magento SEO 使用技巧
2010-06-13 20:50 1057这些内容大致分为: HTML Head URL rewr ... -
Magento web services API 扩展
2010-06-13 11:52 3085<?xml version="1.0&qu ... -
Magento image 操作
2010-06-13 10:48 1277由于lib/Varien/Image.php 的 Varie ... -
Magento中直接使用SQL查询语句
2010-06-13 10:29 1753本文已移到:http://www.iifire.com ... -
在导航栏中或其他位置添加Home链接
2010-06-13 08:47 2492本节不打算翻译,留给自己需要的时候Copy用 A ... -
Create Payment Method Module
2010-06-13 08:23 1145Javaeye的一些作者也有相 ...
相关推荐
magento-events-cheat-sheet.pdf Magento内部事件速查表,Magento模块开发、扩展的必备手册!
magento数据结构分析 magento数据字典
magento用户使用手册
magento 二次开发模块实例(代码) 复制到工程即可使用
magento结构和原理,能让你更好的理解magento
hellowired magento 模板,magento 1.7 使用. 外贸站模板。
如果你正在创建一个Magento的管理模块(学习创造Magento管理模块),那么你一定会被要求创建一个管理列表既Grid。创建列表,Magento新手程序员有点困难,但在本教程中,我们将创建一个网格在管理模块中最简单的方式...
Magento实例讲解
magento 使用手册,介绍magento使用的手册,是magento从业人员的最好教程
Magento 2 Beginners Guide by Gabriel Guarino English | 14 Mar. 2017 | ASIN: B01MS81BQX | 442 Pages | AZW3 | 31....He is also a moderator in Magento forums, and he is a frequent speaker at Magento events.
Magento 的特色1 容易整合Magento 让整合第三方厂商解决方案变得更加容易,透过 Magento 建立客制化网站可以节省您很多的时间与资源。2 新颖的功能像是产品标签、多送货地址或产品比较系统等功能,您不需要支付额外...
home-appliances magento 模板,magento 1.7 使用. 外贸站模板。
比较详细的介绍了magento,并讲解了插件和api接口的开发和运用。比较适合新手了解magento。
Magento的元素和专业术语....................................................................................................6 网站和商店(website and store)...............................................
NULL 博文链接:https://hudeyong926.iteye.com/blog/1416591
magik shoes magento 模板, magento 1.7 模板
Magento 让整合第三方厂商解决方案变得更加容易,透过 Magento 建立客制化网站可以节省您很多的时间与资源。 2 新颖的功能 像是产品标签、多送货地址或产品比较系统等功能,您不需要支付额外的费用来取得,在现成...
magento的SMTP插件magento的SMTP插件magento的SMTP插件
适合于magento1.6.0以上版本的网站,先安装测试数据,再安装网站,内有使用说明
演示地址:http://olegnax.com/product/athlete-responsive-magento-theme/livepreview/ Athlete Magento主题,兼容...黑白2个版本,AJAX加入购物车,快速查看,高级幻灯片,博客,提供快速安装包演示数据和说明文档。