修复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
复制内容到剪贴板
/**
* 取得商品最终使用价格
*
* @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())
{
在这上面加入一函数:
复制内容到剪贴板
functionupdate_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_listas$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') . " WHEREsession_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
到此问题解决了。另外,转载请注意保留出处。谢谢。