- 浏览: 81712 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 1036开发Magento后台的时候经常用到表单(Varien_Dat ... -
Magento A-Z和sitemap插件
2012-09-30 11:53 3741Iifire历经四个月多开发 ... -
Magento SQL绑定查询条件
2012-04-17 15:17 2640Magento从数据库中取数据时大多用的Collection, ... -
Magento站内信插件
2012-02-28 10:04 1481Magento Message Box即站内信组件,主要用于管 ... -
Magento內链外链插件
2012-02-21 10:26 1479给您的Magento网站添加关键词的链接,更多的内链和外链,更 ... -
Magento高级产品订阅
2012-02-21 08:54 2279基本功能介绍 产品订 ... -
Magento产品降价通知和到货通知插件
2012-02-09 16:04 01.客户可以在Magento前台页面订阅某个产品的降价通知(缺 ... -
Magento学习课程继续
2011-03-20 16:05 1492由于前一大段时间都比较忙,忽略了大家啦,好久没有更新内容了。打 ... -
Magento在首页自定制Block的方法
2010-09-19 14:27 2833Magento中想在首页显示一些自定制的BLock有很多中方法 ... -
magento获取相应的查询语句
2010-09-19 14:12 1082虽然Magento对数据库层封装得比较深,但是我们可以很轻松的 ... -
Magento 使用小技巧体现大智慧(Last things first)
2010-06-15 23:38 1287在我们的购物车Magento上线之前,有些小细节很容易被忽略。 ... -
从数据库设计看Magento系列教程(1)
2010-06-15 19:11 0TODO..... -
Magento CMS 应用实例
2010-06-14 19:03 4804下面是一些CMS的应用实例: 本文已移到 http:// ... -
Magento 1.4.1.0 的CMS太酷了
2010-06-14 02:49 1716哇,Magento 1.4.1.0版本已经出来了,今天安装使用 ... -
Magento SEO 使用技巧
2010-06-13 20:50 1116这些内容大致分为: HTML Head URL rewr ... -
Magento web services API 扩展
2010-06-13 11:52 3127<?xml version="1.0&qu ... -
Magento image 操作
2010-06-13 10:48 1317由于lib/Varien/Image.php 的 Varie ... -
Magento中直接使用SQL查询语句
2010-06-13 10:29 1800本文已移到:http://www.iifire.com ... -
在导航栏中或其他位置添加Home链接
2010-06-13 08:47 2532本节不打算翻译,留给自己需要的时候Copy用 A ... -
Create Payment Method Module
2010-06-13 08:23 1184Javaeye的一些作者也有相 ...
相关推荐
Magento 是一个广受欢迎的开源电子商务平台,为开发者提供了高度可定制性和灵活性。为了更好地利用 Magento 的功能进行模块开发或扩展,理解其事件系统至关重要。本篇文章将详细介绍 Magento 事件速查表中的关键事件...
标题:“Magento数据结构分析” 描述:“Magento数据字典”提供了对Magento系统中各种数据库表的深入理解,这对于理解和优化Magento的性能至关重要。 一、Magento数据结构解析 Magento是一款功能强大的电子商务...
以下将详细介绍Magento的使用和开发相关知识点。 首先,Magento的特色在于其强大的电子商务功能和灵活性。它支持多网站和多商店管理,允许商家在一个后台管理多个网站或商店。其程序架构分为内核(Core)、本地模块...
总的来说,熟悉Magento的常用方法和插件,不仅包括对核心框架的理解,还要掌握模块化开发、事件驱动、布局和模板引擎的使用,以及插件开发和调试技巧。同时,利用合适的开发工具可以极大地提升开发效率和代码质量。...
### Magento用户使用手册知识点概述 #### 第一章:Magento介绍 **Magento的特色:** - **高度可定制性:** Magento允许商家根据自己的业务需求定制前端和后端。 - **强大的社区支持:** Magento拥有一个庞大的...
magento结构和原理 magento结构和原理是magento...通过了解magento的文件目录结构、URL路由与分发器、模板调用对应的JS、CSS、图片、重写核心模块等知识点,可以更好地理解magento的工作机理和开发magento模块和主题。
本实例提供了具体的模块开发代码,帮助开发者深入理解Magento的架构和工作原理。 首先,我们需要了解Magento的模块化结构。在Magento中,每个功能或服务都是一个模块,这些模块通过定义在`app/etc/modules`目录下的...
Magento是一款流行的开源电子商务平台,其功能强大且模块化,它支持...通过学习本指南,开发者可以掌握Magento开发的基础知识和高级技巧,能够为电子商务项目提供定制化的解决方案,有效地提升网站的功能性和用户体验。
使用Magento样例数据不仅可以加快开发和测试速度,还可以帮助新手更快地理解和学习Magento的架构和工作原理。它是一个宝贵的资源,尤其是对于那些初次接触Magento的开发者或店主来说,能提供一个直观的学习平台。 ...
这份“Magento用户使用和开发手册”涵盖了Magento的各个方面,包括基础操作、商店设置、产品管理、订单处理以及高级开发技巧。 首先,让我们从用户使用手册开始。这份PDF文件详细介绍了如何在Magento平台上进行日常...
在安全方面,虽然Magento 1.7已不再接收官方的安全更新,但你可以通过定期备份、使用安全插件和保持服务器安全来保护你的网站。另外,考虑升级到更现代的Magento版本(如Magento 2)可以带来更多的性能提升和安全...
在这个实例中,我们将深入探讨如何在Magento中创建一个显示“Bestseller”产品的自定义页面。 首先,理解Magento的模块化结构至关重要。每个功能或特性在Magento中都对应一个模块,模块是Magento的基本构建单元。...
Magento是一款强大的开源电子商务平台,专为在线商家设计,提供丰富的功能和高度的可定制性。在本主题中,我们关注的是“hellowired”Magento模板,特别针对magento 1.7版本,这是一个专为外贸站点设计的模板。 ...
这包括所有的 Magento 根目录文件以及媒体、skin和var等目录。可以使用`rsync`或FTP客户端完成这一操作: ```bash rsync -avz --delete /path/to/source/magento/ /path/to/destination/ ``` 这里,`/path/to/...
6. **Spring Integration**:如果使用Spring框架,可以考虑使用Spring Integration模块来简化与Magento的集成。它提供了对HTTP、SOAP和其他协议的高级抽象,可以更方便地处理API调用。 7. **测试**:编写单元测试和...
如果你正在创建一个Magento的管理模块(学习创造Magento管理模块),那么你一定会被要求创建一个管理列表既Grid。创建列表,Magento新手程序员有点困难,但在本教程中,我们将创建一个网格在管理模块中最简单的方式...
Magento实例讲解