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 相关文章推荐
一个php作的文本留言本的例子(二)
Oct 09 PHP
PHP获取网站域名和地址的代码
Aug 17 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
php判断页面是否是微信打开的示例(微信打开网页)
Apr 25 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
跟我学Laravel之路由
Oct 15 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
php实现跨域提交form表单的方法【2种方法】
Oct 17 PHP
php cookie用户登录的详解及实例代码
Jan 03 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
基于mysql的bbs设计(二)
2006/10/09 PHP
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
stripos函数知识点实例分享
2019/02/11 PHP
php5与php7的区别点总结
2019/10/11 PHP
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
python计算方程式根的方法
2015/05/07 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
七一党建活动方案
2014/01/28 职场文书
1亿有多大教学反思
2014/05/01 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫