关于修复ecshop当商品设置数量优惠时,加入不同属性的商品数量优惠判断错误
2016-09-11 20:39 来源:www.chinab4c.com 作者:ecshop专家
修复ECSHOP一重要BUG,当商品设置数量优惠时,加入不同属性的商品数量优惠判断错误
例,优惠数量设置如下:
1件 100元
5件 90元
10件 80元
该商品有A、B属性规格
我添加A属性5件到购物车,再添加B属性此商品5件到购物车
按道理该商品数量达到了10件,价格应该会是80元。
但是ECSHOP在这里有一个错误是没有进行相以应的验证,只判断了单件商品的数量,所以价格是90元。而且单独增减一个时不会对另一个的价格进行处理 。
在这里写了一个函数来解决此问题
修改如下:
找到
includes/lib_common.php
- /**
- * 取得商品最终使用价格
- *
- * @param string $goods_id 商品编号
- * @param string $goods_num 购买数量
- * @param boolean $is_spec_price 是否加入规格价格
- * @param mix $spec 规格ID的数组或者逗号分隔的字符串
- *
- * @return 商品最终购买价格
- */
- function get_final_price($goods_id, $goods_num = '1', $is_spec_price = false, $spec = array())
- {
在这上面加入一函数:
- function update_cart_volume_price($goods_id){
- $volume_price = '0'; //商品优惠价格 www.lyecs.com 老杨ECSHOP
- //取得商品优惠价格列表
- $price_list = get_volume_price_list($goods_id, '1');
- if (!emptyempty($price_list))
- {
- //获取所不同规格的相同商品数量 www.lyecs.com 老杨ECSHOP
- $sql = "SELECT SUM(goods_number) " .
- " FROM " . $GLOBALS['ecs']->table('cart') . " " .
- " WHERE session_id = '" . SESS_ID . "' AND goods_id= '$goods_id' AND rec_type = '" . CART_GENERAL_GOODS . "' ";
- $all_number = $GLOBALS['db']->getOne($sql);
- foreach ($price_list as $value)
- {
- if ($all_number >= $value['number'])
- {
- $volume_price = $value['price'];
- }
- }
- //如果有优惠价格,更新所不同规格的相同商品的价格 www.lyecs.com 老杨ECSHOP
- if($volume_price){
- $sql = "UPDATE ".$GLOBALS['ecs']->table('cart'). " SET goods_price = '$volume_price' ".
- " WHERE session_id = '" . SESS_ID . "' AND goods_id= '$goods_id' AND rec_type = '" . CART_GENERAL_GOODS . "' ";
- $GLOBALS['db']->query($sql);
- }
- }
- }
然后在这此文件找到:
- //如果需要加入规格价格
- if ($is_spec_price)
- {
- if (!emptyempty($spec))
- {
- $spec_price = spec_price($spec);
- $final_price += $spec_price;
- }
- }
在此下面添加如下代码:
- if(!$volume_price){
- //如果没有优惠价格,更新所不同规格的相同商品的价格 www.lyecs.com 老杨ECSHOP
- $sql = "UPDATE ".$GLOBALS['ecs']->table('cart'). " SET goods_price = '$final_price' ".
- " WHERE session_id = '" . SESS_ID . "' AND goods_id= '$goods_id' AND rec_type = '" . CART_GENERAL_GOODS . "' ";
- $GLOBALS['db']->query($sql);
- }
打开includes/lib_order.php
找到
- else //购物车没有此物品,则插入
- {
- $goods_price = get_final_price($goods_id, $num, true, $spec);
- $parent['goods_price'] = max($goods_price, 0);
- $parent['goods_number'] = $num;
- $parent['parent_id'] = 0;
- $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('cart'), $parent, 'INSERT');
- }
- }
- /* 把赠品删除 */
- $sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" . SESS_ID . "' AND is_gift <> 0";
- $GLOBALS['db']->query($sql);
在下面添加:
- update_cart_volume_price($goods_id);
打开flow.php
找到:
- /* 删除所有赠品 */
- $sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" .SESS_ID. "' AND is_gift <> 0";
- $GLOBALS['db']->query($sql);
在下面添加:
-
update_cart_volume_price($goods['goods_id']);
到此问题解决了。另外,转载请注意保留出处。谢谢。
最近更新
常用插件
- ecshop2.7.2生成虚拟订单2.
以前我们开发过ecshop下的虚拟订单,就是客户在访问的时候,会自动生...
- ecshop最小购买数量控制插
ecshop最小购买数量控制插件,这个插件主要是为我们提供一个十分方便...
- ecshop没登陆情况下订单查
ecshop没登陆情况下订单查询插件,主要是针对ecshop在没有登陆的情况下...
- ecshop二次开发商品购买增
图片1香...
- ecshop2.7.1邮件发送插件
ecshop2.7.1邮件发送插件:该插件主要的开发思想是源于ecshop短信发送系统...