FWQ
从实现购物车快捷支付来探讨zen cart的ONS设计模式
一切源于开源,最终服务于开源的,欢迎探讨,敬请尊重原创。 虽说zen cart更新慢,而且最新版中大量的代码还是面向过程的写法,只要少部分是采用OOP设计,然而其中至少也有引入一些OOP开发中常用的设计模式,比如我们今天要谈的obserer/notifier system(ONS),我不太确定该什么翻译了,暂且称它为侦听者(也有人翻作侦听器,侦听事件,事件)设计模式。不要纠结这个了,我通常不翻,直接用英文说法,不然和别人沟通时会有问题。想要深入了解这个设计模式的可以去看一些关于设计模式的书。这个设计模式的应用很广泛了,在开源的PHP电商平台如WooCommerce里的HOOK,Magento里的observer/Event, opencart里的Front … 做了这么多年电商,发现一直在原地踏步。很多人总在想为什么转化率很低,也想了很多办法来提高转化率,换了一套又一套的模板,改了又改的下单流程,一个又一个的促销活动 … 如果说我们觉得自己的站的体验真的很差,那还是让用户早做决定,迅速购买,快速支付,我所指的快速支付是指在购物车页面保存一直快照,然后直接将用户带到第三方支付页面,舍弃掉zen cart站内的下单流程,只传递订单号,金额,货币,购物内容这几个参数给第三方支付网关,由支付网关负责收集用户的地址信息。这就是我这边要举的例子。以zen cart为实验平台,在产品展示页面或购物车页面显示快速支付按钮或链接,其实这方面paypal很早就做了,我这边只不过是举个例子来说明。 从zen cart 1.3以后的版本中,所有类都是继承base这个类,所以,首先,所有的zen cart核心类都具有侦听事件并在事件发生时做出相应动作的能力。由于zen cart目前仍然有大部分的代码是面向过程而非OOP的,所以,要在某个页面侦听事件并响应,就要借助zen cart的$zco_notifier全局变量。 首先我们来定义一个observer类,因为是要在购物车页面的checkout按钮前增加一个快捷支付的按钮,所以我把类名定为 express_checkout,继承base类,代码如下 includes/classes/observers/class.express.checkout.php class express_checkout extends base { function __construct() {…