关于ecshop积分兑换时提示库存不足解决方法

2016-09-11 20:39 来源:www.chinab4c.com 作者:ecshop专家

 使用积分兑换商品时会提示库存不足:“对不起,该商品库存不足,现在不能兑换!” ,解决方法如下:
1. 打开Ecshop积分商城文件 "根目录/exchange.php"
 
发现248行与289行都有库存不足时报错的提示代码:
 
    248行:
 
    /* 查询:检查兑换商品是否有库存 */
    if($goods['goods_number'] == 0 && $_CFG['use_storage'] == 1)
    {
        show_message($_LANG['eg_error_number'], array($_LANG['back_up_page']), array($back_act), 'error');
    }
   289行:
 
    //查询:商品存在规格 是货品 检查该货品库存
    if((!empty($specs)) && ($product_info['product_number'] == 0) && ($_CFG['use_storage'] == 1))
    {
        show_message($_LANG['eg_error_number'], array($_LANG['back_up_page']), array($back_act), 'error');
    }
显然248行是直接检查的商品库存这里是没有问题的。问题出在289行,检查货品出了问题。
 
这里代码的意思是只要存在属性选择,就对对货品数量进行库存检查这显然是错误的,
 
因为:只有单选属性 跟货品挂钩,多选属性 是没有货品概念。
 
2. 修改Ecshop积分兑换文件代码解决问题。
 
修改289行代码:
 
    //查询:商品存在规格 是货品 检查该货品库存
    if((!empty($specs)) && ($product_info['product_number'] == 0) && ($_CFG['use_storage'] == 1))
    {
        show_message($_LANG['eg_error_number'], array($_LANG['back_up_page']), array($back_act), 'error');
    }
如下:
 
    //查询:商品存在规格 是货品 检查该货品库存
    if((is_spec($specs)) && ($product_info['product_number'] == 0) && ($_CFG['use_storage'] == 1))
    {
        show_message($_LANG['eg_error_number'], array($_LANG['back_up_page']), array($back_act), 'error');
    }
重新测试问题已经解决了。
 
 
3. 修改原理介绍——Ecshop二次开发知识总结。
 
 做过Ecshop二次开发的朋友都了解,Ecshop中商品的属性有三种:
 
唯一属性:
 只有一个值,购买商品时不能选择。
单选属性:
 拥有多个值,用户只能选一个,比如颜色,选择红色的衣服或者蓝色的。
复选属性:
 复选属性拥有多个值,用户可以选择多个。
在三种属性中仅第二种“单选属性 ”与货品库存有关。而函数is_spec()就是检查一组属性中是否有单选属性。因为加上此判断后问题解决。