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 相关文章推荐
对盗链说再见...
Oct 09 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
Drupal7连接多个数据库及常见问题解决
Mar 02 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
ThinkPHP中处理表单中的注意事项
Nov 22 PHP
php生成图片缩略图的方法
Apr 07 PHP
php通过排列组合实现1到9数字相加都等于20的方法
Aug 03 PHP
php数组分页实现方法
Apr 30 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
PHP实现网站应用微信登录功能详解
Apr 11 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 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
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
PHP curl使用实例
2015/07/02 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
php实现socket推送技术的示例
2017/12/20 PHP
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
python与C互相调用的方法详解
2017/07/14 Python
python 构造三维全零数组的方法
2018/11/12 Python
Django中使用Celery的方法示例
2018/11/29 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
pandas数据拼接的实现示例
2020/04/16 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
Django REST 异常处理详解
2020/07/15 Python
啤酒销售实习自我鉴定
2013/09/24 职场文书
生产部管理制度
2014/01/31 职场文书
《胡杨》教学反思
2014/02/16 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
javascript Number 与 Math对象的介绍
2021/11/17 Javascript