【老杨原创】BUG-商品设置数量优惠时加入不同规格的商品,数量优惠判断错误【重要】

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家



此问题老杨官方原帖:http://www.lyecs.com/article/w-48.html
老杨官方网站:http://www.lyecs.com/
老杨版ECSHOP介绍:http://www.lyecs.com/lyecshop.html【超强用户体验】
(关于咨询老杨版ECSHOP单独出售的问题,老杨现在不好答复,但2014年一季度会出高端模板专区,使用最新老杨版ECSHOP框架,届时朋友们可以关注!)
描述:此问题对于ECSHOP的数量优惠功能可以说是致命的,往往商城中有多规格的商品时,这个错误会让你放弃数量优惠功能。

后台设置数量优惠


老杨版本修复后的效果:




修复ECSHOP一重要BUG,当商品设置数量优惠时,加入不同属性的商品数量优惠判断错误
例,优惠数量设置如下:
1件 100元
5件90元
10件80元
该商品有A、B属性规格
我添加A属性5件到购物车,再添加B属性此商品5件到购物车
按道理该商品数量达到了10件,价格应该会是80元。
但是ECSHOP在这里有一个错误是没有进行相以应的验证,只判断了单件商品的数量,所以价格是90元。而且单独增减一个时不会对另一个的价格进行处理 。
老杨在这里写了一个函数来解决此问题,也将此BUG的修改加入了LYECSHOP v1.1.3版中(老版本客户可以联系修改)。
修改如下:
找到
includes/lib_common.php
复制内容到剪贴板
  • /**
  • * 取得商品最终使用价格
  • *
  • * @paramstring$goods_id商品编号
  • * @paramstring$goods_num购买数量
  • * @paramboolean $is_spec_price 是否加入规格价格
  • * @parammix$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); //www.lyecs.com 老杨ECSHOP



打开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']);//www.lyecs.com 老杨ECSHOP




到此问题解决了。另外,转载请注意保留出处。谢谢。

谢。

回答:
老杨版Ecshop神马时候接受单独购买

不错,不错




2014年一季度出高端模板专区,使用最新老杨版ECSHOP框架,可以关注!




墙裂关注中。。。。

顶!!!!!!!!!!!!!!

顶!!!!!!!!!!!

帮老杨 继续顶起来

再跑过来支持老杨

顶!!!!!




持续关注中~~~老杨,有具体日期吗?很期待~~~

回复老杨


墙裂关注中。。。。
ltime 发表于 2013-12-30 20:18



模板业务已上线,第一套模板正式开售: http://www.lyecs.com/lyecshop3.html





模板业务已上线,第一套模板正式开售: http://www.lyecs.com/lyecshop3.html

顶!!!!!!

顶下。。。。。。