需求
一直在维护的一个微商城,是用ECShop和ECTouch搭建起来的,前阵子有客户下单并且已付款成功,客服确发现没有对应的尺码,无奈吞进去的钱又要吐出来,很是不爽。这也就发生了个这么个问题:不同属性规格的商品,应该显示不同的库存,并在库存不足的时候提醒不足,不能下单。我个人的前端美工功力也有限,网上搜寻了资料,自己改了代码,实现了不同属性库存联动的目的。结果如下图。
解决方法
思路
-
对每种商品的货品数量编辑维护,不同规格属性的商品不同的库存数量。
-
模板中添加库存显示标签,加上id属性,以便更改库存值。
-
选中不同属性规格出发异步ajax调用,返回对应的价格,对应的库存。
-
ajax回调函数,更改相应属性值。
-
对应PHP文件里的获得对应库存的代码。
方法
-
维护不同属性商品库存数量。点击如图箭头指向的按钮就可以进行相关货品的维护。
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 库存数量*}--> 库存:<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)); }
总结
最后我也测试了下,不同属性的库存如果不够,点击购买的时候也是会提示库存不足了,这样在一定程度上也提高了客户的体验吧。这个商城也运行有段时间了,程序方面还是比较稳定的,就是存在写小的问题需要调整。总体上还是令人满意的。在留下张商城的首页吧。
评论前必须登录!
注册