php 网上商城促销设计实例代码


Posted in PHP onFebruary 17, 2012

大体的思想,每一个促销要新建一个促销类,有专门的开关来控制是否生效。
用商品里面的促销识别码来判断具体调用哪一个促销实例。
首先,在添加商品的时候,分两步,第一步是添加状态,第二步是把购物车内的商品显示这个状态。
一,添加步骤几个重要的点:
1,添加商品之前,遍历所有的促销互斥条件。
例如,某一款商品不可以和另一个商品同时在一个购物车内;或者某个用户权限,不可以购买特定的一件商品等等。
2,添加商品之前,选择特定的促销实例,来进行添加之前的操作。
注:第二点与第一点的区别在于1是要遍历所有的促销实例,而2是单独的一条。
3,添加商品后,根据特定的促销实例,所要进行的操作。

/** 
* 向购物车内添加商品 
* @param int $goods_id 商品ID 
* @param string $goods_spec 商品规格 
* @param int $goods_number 商品数量 
* @param string $promote_name 商品参加活动 
* @return bool 
*/ 
public function goodsAdd($goods_id, $goods_spec, $goods_number, $promote_name) 
{ 
//获取所有有效的促销实例 
$rules = $this->_getAllRuleInstance(); 
foreach($this->_rules as $instance) 
{ 
//换礼互斥判断 
if(!$instance->goodsExclusion($goods_id, $goods_spec)) 
{ 
return false; 
} 
} 
//获取商品单独的促销实例 
$rule = $this->_getRuleInstance($promote_name); 
//添加商品之前操作 
if($rule->beforeGoodsAdd()) 
{ 
$rule->goodsAdd($goods_id, $goods_spec, $goods_number); 
//添加商品之后操作 
return $rule->afterGoodsAdd(); 
} 
return false; 
}

/** 
* 获取可用规则实例列表 
* @return array 
*/ 
private function _getAllRuleInstance() 
{ 
if(empty($this->_rules)) 
{ 
$dir = dirname(__FILE__).'/Cart/Rule/'; 
$dir_handle = opendir($dir); 
while($file = readdir($dir_handle)) 
{ 
if(is_file($dir.$file)) 
{ 
$instance = $this->_getRuleInstance(substr($file, 0, strpos($file, '.'))); 
if($instance->enabled()) 
{ 
$this->_rules[] = $instance; 
} 
} 
} 
} 
return $this->_rules; 
}

/** 
* 获取购物车规则类 
* @param string $name 规则名称 
* @return Bll_Shop_Cart_Rule 
*/ 
private function _getRuleInstance($name) 
{ 
$rule_name = 'Bll_Shop_Cart_Rule_'.$name; 
try 
{ 
Zend_Loader::loadClass($rule_name); 
$this->_rule = new $rule_name(); 
$this->_rule->setCart($this); 
return $this->_rule; 
}catch (Exception $e) 
{ 
Bll_LogWriter::logException('购物规则对象加载异常. rule_name:'.$rule_name); 
throw new Exception('购物规则对象加载异常.'); 
} 
}

这里主要用到的促销是,判断某一个人是否有添加这个商品的权限,打折等。
二,遍历购物车商品的操作
这一步要执行关键操作是遍历所有促销策略的检查列表函数。
这里常常可以用到的促销是满多少钱,送赠品,买二送一等等。
/** 
* 获取购物车内商品清单对象列表 
* @return array Bll_Shop_Cart_Rule 
*/ 
public function goodsViewList() 
{ 
$list = $this->getGoodsList(); 
// 在列表时检查购物车内商品列表 
$rules = $this->_getAllRuleInstance(); 
foreach($this->_rules as $instance) 
{ 
$instance->setGoodsList($list)->goodsCheckList(); 
$this->_tip_rules[] = $instance; 
} 
//获取最新购物车列表 
$goods_list = $this->_cart->getGoodsList(); 
return $goods_list; 
}

第三,提交订单之前的操作
有一些类型的促销,比如某人有打折的权限,当下完订单后,这个打折的权限就被用掉了;或者在下单之前要先检查这个订单的金额,如果小于多少就不准下这个订单等等。
以上这些都会用到提交订单之前的操作。
PHP 相关文章推荐
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
PHP采集利器 Snoopy 试用心得
Jul 03 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
常用PHP框架功能对照表
Oct 23 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
Feb 14 PHP
PHP实现的文件操作类及文件下载功能示例
Dec 24 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
php中通过curl模拟登陆discuz论坛的实现代码
Feb 16 #PHP
初品cakephp 入门基础
Feb 16 #PHP
php线性表顺序存储实现代码(增删查改)
Feb 16 #PHP
用PHP实现Ftp用户的在线管理
Feb 16 #PHP
PHP排序算法的复习和总结
Feb 15 #PHP
php网上商城购物车设计代码分享
Feb 15 #PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 #PHP
You might like
php+mysql分页代码详解
2008/03/27 PHP
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
innerText 使用示例
2014/01/23 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
React Router基础使用
2017/01/17 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
企业军训感想
2014/02/07 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
促销活动总结模板
2014/07/01 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
小石潭记导游词
2015/02/03 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android