zencart
事件通知,即事件绑定,主要是通过绑定某个事件,然后处理该事件来达到
事件响应
,跟平常所说的事件绑定原理是一样的。
比如我们在header_php.php文件里面经常会看见,类似
$zco_notifier->notify('NOTIFY_SEARCH_ORDERBY_STRING', $listing_sql);
$zco_notifier->notify('NOTIFY_HEADER_END_ADVANCED_SEARCH_RESULTS', $keywords);
$zco_notifier->notify('NOTIFY_HEADER_START_ADVANCED_SEARCH_RESULTS');
等等。有很多人都觉得奇怪,这个是干什么用的呢。
其实这个就是事件绑定,这个是zen cart非常好的一个地方之一,通过绑定某个事件,然后在其他地方对该事件的处理。从开发的角度来说,这个是很好的解决了模块之间耦合问题。这个对于zen cart系统的后期开发和维护都是非常重要的。特别是对于大的网站。知道了这个的好处,那就应该知道怎么去利用它的好处。
如何使用zencart的事件处理机制呢?
我们可以仿照系统本身存在的这些处理方式来做,第一在includes\classes\observers 目录下新建一个PHP类,这个来继承基类base,比如我们可以参考includes\classes\observers\class.products_viewed_counter.php 这个类
这个类主要是用来响应NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR 这个事件,这个是商品浏览量计数
该类的代码如下
该事件的通知代码在includes\modules\pages\product_info\main_template_vars.php 文件中: $zco_notifier->notify('NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR', (int)$_GET['products_id']);
该类的对象在includes\auto_loaders\config.products_viewed_counter.php 文件中初始化
这个类里面只要重写基类的方法update和实现构造函数就可以了,其中构造函数主要就是绑定该类处理的事件。具体内容可以参考这个类的实现代码。思路大概就是这样,具体使用还得自己动手实现才能深刻的掌握。
简洁一点的说,要使用zencart事件响应机制
第一,要实现绑定该事件很处理该事件的一个类。
第二,系统初始化的时候初始化该类的对象。
第三,在需要响应事件的地方绑定该事件。
比如我们在header_php.php文件里面经常会看见,类似
$zco_notifier->notify('NOTIFY_SEARCH_ORDERBY_STRING', $listing_sql);
$zco_notifier->notify('NOTIFY_HEADER_END_ADVANCED_SEARCH_RESULTS', $keywords);
$zco_notifier->notify('NOTIFY_HEADER_START_ADVANCED_SEARCH_RESULTS');
等等。有很多人都觉得奇怪,这个是干什么用的呢。
其实这个就是事件绑定,这个是zen cart非常好的一个地方之一,通过绑定某个事件,然后在其他地方对该事件的处理。从开发的角度来说,这个是很好的解决了模块之间耦合问题。这个对于zen cart系统的后期开发和维护都是非常重要的。特别是对于大的网站。知道了这个的好处,那就应该知道怎么去利用它的好处。
如何使用zencart的事件处理机制呢?
我们可以仿照系统本身存在的这些处理方式来做,第一在includes\classes\observers 目录下新建一个PHP类,这个来继承基类base,比如我们可以参考includes\classes\observers\class.products_viewed_counter.php 这个类
这个类主要是用来响应NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR 这个事件,这个是商品浏览量计数
该类的代码如下
- class products_viewed_counter extends base {
- function __construct() {
- $this->attach($this, array('NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR'));
- }
- function update(&$class, $eventID, $paramsArray = array())
- {
- if ($eventID == 'NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR')
- {
- if (defined('LEGACY_PRODUCTS_VIEWED_COUNTER') && LEGACY_PRODUCTS_VIEWED_COUNTER == 'on')
- {
- global $db;
- $sql = "update " . TABLE_PRODUCTS_DESCRIPTION . "
- set products_viewed = products_viewed+1
- where products_id = '" . (int)$paramsArray . "'
- and language_id = '" . (int)$_SESSION['languages_id'] . "'";
- $res = $db->Execute($sql);
- }
- }
- }
- }
该类的对象在includes\auto_loaders\config.products_viewed_counter.php 文件中初始化
这个类里面只要重写基类的方法update和实现构造函数就可以了,其中构造函数主要就是绑定该类处理的事件。具体内容可以参考这个类的实现代码。思路大概就是这样,具体使用还得自己动手实现才能深刻的掌握。
简洁一点的说,要使用zencart事件响应机制
第一,要实现绑定该事件很处理该事件的一个类。
第二,系统初始化的时候初始化该类的对象。
第三,在需要响应事件的地方绑定该事件。
如果还不明白请回帖说明。
引用 zencart论坛文章 http://www.zencart-bbs.com/read-htm-tid-5244.html