[ECShop]实现不同属性库存联动

需求

一直在维护的一个微商城,是用ECShop和ECTouch搭建起来的,前阵子有客户下单并且已付款成功,客服确发现没有对应的尺码,无奈吞进去的钱又要吐出来,很是不爽。这也就发生了个这么个问题:不同属性规格的商品,应该显示不同的库存,并在库存不足的时候提醒不足,不能下单。我个人的前端美工功力也有限,网上搜寻了资料,自己改了代码,实现了不同属性库存联动的目的。结果如下图。

ECShop属性库存联动

解决方法

思路

  1. 对每种商品的货品数量编辑维护,不同规格属性的商品不同的库存数量。

  2. 模板中添加库存显示标签,加上id属性,以便更改库存值。

  3. 选中不同属性规格出发异步ajax调用,返回对应的价格,对应的库存。

  4. ajax回调函数,更改相应属性值。

  5. 对应PHP文件里的获得对应库存的代码。

方法

  1. 维护不同属性商品库存数量。点击如图箭头指向的按钮就可以进行相关货品的维护。

ECShop维护货品数量按钮

ECShop货品维护界面

2.在goods.dwt模板中,在选择商品数量的代码后添加 显示库存的 <span>标签。

<ul class="quantity">
  <h2>数量:</h2>
  <div class="items"> <span class="ui-number radius5"> 
   <!-- {if $goods.goods_id gt 0 && $goods.is_gift eq 0 && $goods.parent_id eq 0} 普通商品可修改数量 -->
   <button type="button" class="decrease radius5" onclick="changenum(- 1)">-</button>
   <input class="num" name="number" id="goods_number" autocomplete="off" value="1" min="1" max="{$goods.goods_number}" type="number" />
   <button type="button" class="increase radius5" onclick="changenum(1)">+</button>
   <!-- {else} --> 
   {$goods.goods_number} 
   <!-- {/if} --> 
   </span>
   <!--{* tmac 库存数量*}-->
   &nbsp;&nbsp;&nbsp;&nbsp;库存:<span id="tmac_goods_num">{$goods.goods_number}</span>
   </div>
</ul>

3.添加ajax调用代码。已有的代码,在选中不同的属性的时候已经触发了一个Ajax调用 changePrice(),主要目的是修改对应的价格,我直接在这个事件里加入了对应库存取得的请求。

/**
 * 点选可选属性或改变数量时修改商品价格的函数
 */
function changePrice()
{
  var attr = getSelectedAttributes(document.forms['ECS_FORMBUY']);
  var qty = document.forms['ECS_FORMBUY'].elements['number'].value;
  Ajax.call('goods.php', 'act=price&id=' + goodsId + '&attr=' + attr + '&number=' + qty, changePriceResponse, 'GET', 'JSON');
 //tmac 改变库存
  Ajax.call('goods.php?act=get_products_info', 'id=' + attr+ '&goods_id=' + goodsId, shows_number,'GET', 'JSON');
}

4.回调函数用的是shows_number()方法。

//tmac 改变库存
function shows_number(result){
    //console.log(result);
    if(result!=false){
        if(result.product_number !=undefined){
            //这里我把$换成了document.getElementById,因为ecshop有时候不兼容jquery
            //$('shows_number').innerHTML = result.product_number+'件';
            //tmac改变库存       
             document.getElementById('tmac_goods_num').innerHTML = result.product_number;
        }else{
            //document.getElementById('tmac_goods_num').innerHTML = '未设置';
            //$('shows_number').innerHTML = '未设置';    
        }
    }    
}

5.对应的获得相应属性库存的PHP代码。在goods.php中添加如下代码。

//tmac 获取库存
if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'get_products_info'){
    include('include/cls_json.php');
    $json = new JSON;
    // $res = array('err_msg' => '', 'result' => '', 'qty' => 1);
    $spce_id = $_GET['id'];
    $goods_id = $_GET['goods_id'];
    $row = get_products_info($goods_id,explode(",",$spce_id));
    //$res = array('err_msg'=>$goods_id,'id'=>$spce_id);
    die($json->encode($row));
}

总结

最后我也测试了下,不同属性的库存如果不够,点击购买的时候也是会提示库存不足了,这样在一定程度上也提高了客户的体验吧。这个商城也运行有段时间了,程序方面还是比较稳定的,就是存在写小的问题需要调整。总体上还是令人满意的。在留下张商城的首页吧。

ECShop微商城ECTouch

分享到:更多 ()

抢沙发

评论前必须登录!