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.  
  3.   function __construct() {
  4.     $this->attach($this, array('NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR'));
  5.   }
  6.  
  7.   function update(&$class, $eventID, $paramsArray = array())
  8.   {
  9.     if ($eventID == 'NOTIFY_PRODUCT_VIEWS_HIT_INCREMENTOR')
  10.     {
  11.       if (defined('LEGACY_PRODUCTS_VIEWED_COUNTER') && LEGACY_PRODUCTS_VIEWED_COUNTER == 'on')
  12.       {
  13.         global $db;
  14.         $sql = "update " . TABLE_PRODUCTS_DESCRIPTION . "
  15.                 set        products_viewed = products_viewed+1
  16.                 where      products_id = '" . (int)$paramsArray . "'
  17.                 and        language_id = '" . (int)$_SESSION['languages_id'] . "'";
  18.         $res = $db->Execute($sql);
  19.       }
  20.     }
  21.   }
  22. }

该事件的通知代码在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事件响应机制 
第一,要实现绑定该事件很处理该事件的一个类。 
第二,系统初始化的时候初始化该类的对象。 
第三,在需要响应事件的地方绑定该事件。 
如果还不明白请回帖说明。 

http://www.zencart-bbs.com/read-htm-tid-5244-page-e.html#a

你可能感兴趣的:(Cart,zencart,ZEN)