zencart完整的API开发参考手册(2)

2019-01-19 14:01

init_customer_auth.php (负责检查客户状态, 同时either thru Down for Maintenance or the Approval level)

init_database.php (负责初始化 DB 层)

init_db_config_read.php (负责从数据库中读取配置数据) init_file_db_names.php (负责加载文件和数据库表名定义)

init_general_funcs.php (负责加载位于 includes/functions 和 extra_functions 目录中的通用函数)

init_gzip.php (负责加载 Gzip output-buffering 函数) init_header.php (负责运行页面头部进程) init_languages.php (负责加载多语言支持子系统) init_sanitize.php (负责加载输入消毒代码)

init_sefu.php (负责加载提供搜索引擎友好 URL 的代码) init_sessions.php (负责加载 Session 代码)

init_special_funcs.php (负责加载特殊但是必须的函数)

init_templates.php (负责初始化模板系统和激活模板相关的语言内容定义) init_tlds.php (负责设置顶级域名变量) 1.1.6.3 重写 init_scripts

重写一个 init 脚本是很简单的。includes/init_includes 目录包括了一个名为 overrides 的目录。如果我想要重写 includes/init_includes/init_sessions.php 脚本,那么我只是简单的在 includes/init_includes/overrides 目录中创建一个名为 init_sessions.php 的文件就行了。

1.1.7 在 application_top.php 文件中的过程代码

除了应用自动加载器系统,在 application_top.php 文件中仍然残留了一小撮过程代码(procedural code,和面向对象的代码相对);虽然大部分的过程代码已经让位给处理自动加载器本身。

以下是前台 includes/application_top.php 文件中的代码。注意:我已经移除了文档标签以便浏览:

1.2 观察者类

1.2.1 介绍

一直以来,Zen Cart 项目众多目标中的一个是,让第三方开发者通过一个简单而且优雅的方式来给核心代码添加功能。在过去,我们为了达到这个,依靠重写和自动包括系统。然后这些仍然不能给开发者一个简单的方式来与核心代码的许多领域挂勾,除非是破解核心文件。 观察者/通知者系统被引入,让开发者空前的访问核心代码,而不需要过多的触动任何核心文件。虽然表面上是为一个面向对象代码为基础,我们会在稍后看到它是如何同时与过程代码同时使用。

1.2.2 扩展全部类

为了应用观察者/通知者系统,Zen Cart 的一些结构作了改变。首先引入了两个新的类:基类(class.base.php)和通知者类(class.notifier.php)。

基类包括了用来应用观察者/通知者系统的代码。然而为了使它作用 Zen Cart 的所有其它

类,现在不得不被声明为基类的子类。如果你看一下 Zen Cart 源代码的类文件,你会发现:

通知者类将会在稍后讨论,当我们把扩展观察者/通知者系统(ONS)看成是过程编码的时候。

1.2.3 通知者:

那么,这么小题大做是为了什么?

ONS 的关键点是开发者可以写代码,等待一定的事件发生,然后当发生的时候,执行他们自己的代码。

那么,事件是如何定义,它们在哪被触发?

事件由添加到 v1.3 核心的代码触发。在任何一个我们想通知一个事件发生的类中,我们添加:

下面的例子可能有用:

在购物车类,当一件商品被添加到购物车后,这个事件触发了:

在 Zen Cart v1.3 版

本中许多事件都拥有通知者,这个是清单 。 这些通知很好,那么如何帮助开发者呢?

1.2.4 观察和壮大

为了利用通知者,开发者需要写一些代码来观察它们。观察者需要被写成一个类。有一个好的目录,includes/classes/observers,开发者可以在这放置这些类。

让我们看一个例子。使用上面提到的通知者(NOTIFIER_CART_ADD_CART_END),我如何写一个类来观察那个事件?

正如你看到的,我们已经定义了一个新的名为 myObserver 的类,在它的构造函数(function myObserver)已经把 myObserver 这个类附加到 NOTIFIER_CART_ADD_CART_END 这个事件中。 “不错,”我听到你说,“但是我怎么样才能做点有用的事情?”

OK,问得好。当一个事件发生的时候,基类会查看,是否有任意的其它观察者类在观察这个事件。如果有,那么基类会执行那个观察者类中的一个方法。还 记得上面提到的 $this-

>notify('EVENT_NAME')吗?好的,当那个事件发生,基类会调用所有观察者的 update 方法。让我们看更多的代码:

现在,当 NOTIFIER_CART_ADD_CART_END 发生的时候,我们的 myOberserv::update 方法将会被执行。注意 attach() 可能会被作任何你想监听的类的一个方法被调用

($_SESSION['cart'],在本例中)或者被类的内部变量 $this 调用。两者都可行,因为它们都是基类的一部分,attach 方法存在的地方。 关于参数需要注意。attach 方法有两个参数:

&$observer - 观察者类的引用,用来为一个新的监听者产生一个独一无二的 ID $eventIDArray - 一个通知者数组,这些通知者正在被这个观察者监听 update 方法可以传递三个参数,它们是:

&$callingClass - 这是对类的一个引用,事件在这些类中发生,允许你访问那个类的变量 $notifier - 触发 update 的通知者名字(观察多个通知者是明显可行的) $paramsArray - 还未使用(将来或许会用到)

注意!观察者/通知者系统是为一个面向对象的应用程序而写的, 因为观察者被期待附加到一个在它的方法内拥有通知者的类中。然而,在 Zen Cart 中许多的代码仍然面向过程的,不包括在一个类中。

为了正常运转,我们添加了“stub”通知者类。所以如果你想为在过程代码中的一个通知者创建一个观察者(例如在页面头部),你应该这样把通知者添加到你的 myObserver 类中:

1.2.5 在你的

代码中包括进观察者


zencart完整的API开发参考手册(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:深基坑边坡坍塌事故应急演练方案6.28

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: