zencart事件处理机制简介

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 这个事件,这个是商品浏览量计数  
该类的代码如下  
  1. class products_viewed_counter extends base {
  2.   function __construct() {
  3.     $this->attach($this, array('NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR'));
  4.   }
  5.   function update(&$class, $eventID, $paramsArray = array())
  6.   {
  7.     if ($eventID == 'NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR')
  8.     {
  9.       if (defined('LEGACY_PRODUCTS_VIEWED_COUNTER') && LEGACY_PRODUCTS_VIEWED_COUNTER == 'on')
  10.       {
  11.         global $db;
  12.         $sql = "update " . TABLE_PRODUCTS_DESCRIPTION . "
  13.                 set        products_viewed = products_viewed+1
  14.                 where      products_id = '" . (int)$paramsArray . "'
  15.                 and        language_id = '" . (int)$_SESSION['languages_id'] . "'";
  16.         $res = $db->Execute($sql);
  17.       }
  18.     }
  19.   }
  20. }
该事件的通知代码在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事件响应机制  
第一,要实现绑定该事件很处理该事件的一个类。  
第二,系统初始化的时候初始化该类的对象。  
第三,在需要响应事件的地方绑定该事件。  

如果还不明白请回帖说明。 

引用 zencart论坛文章 http://www.zencart-bbs.com/read-htm-tid-5244.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值