ecshop批量添加商品到购物车----之三步走

通常商品的列表页会这样引入

<!-- #BeginLibraryItem "/library/goods_list.lbi" --><!-- #EndLibraryItem -->

goods_list.lbi文件路径在themes/模板名(默认为default)/library/下

一。修改goods_list.lbi文件

效果图最终为:


代码为:

<input name="" type="checkbox" value="{$goods.goods_id}" class="goods_choose goods_choose{$goods.goods_id}" >


<input name="" type="text" value="1" class="good_num good_num{$goods.goods_id}" style="width:30px; text-align:center;">
大家会发现class有些特殊,这是为后面js拾取准备的,本人js很戳 ,当然优雅的jquery能很好的实现,本人还是图个简便的原则,凑合下就算了^.^

二.在

<!-- #BeginLibraryItem "/library/goods_list.lbi" --><!-- #EndLibraryItem -->
下面添加一行:
<!-- #BeginLibraryItem "/library/goodsAddToCartAll.lbi" --><!-- #EndLibraryItem -->
这是添加的“立即购买”“加入购物车”按钮的代码文件

接下来自然要在上面指定的引入路径下面去添加goodsAddToCartAll.lbi文件

代码:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
{insert_scripts files='showdiv.js'}
  {insert_scripts files='transport.js'}
<li class="ag" style='float:right;clear:both;'>
              <a href="javascript:bool=1;goodschoose()"><img src="images/zy-index-pic-9.jpg" style="margin-right:17px; display:inline;"></a>
                <a href="javascript:goodschoose()"><img src="images/zy-index-pic-8.jpg"></a>
</li>
<br />

效果图:

三.在common.js中添加一下两只函数:

function goodschoose(){//批量添加商品到购物车
  var goodsChooseList=new Array();
  //var goodsString='';
  var goodsChooseList=document.getElementsByClassName('goods_choose');

  var goodsNum=document.getElementsByClassName('good_num');


  for(var i=0;i<goodsChooseList.length;i++){
    if(goodsChooseList[i].checked){//选中商品id
      //alert(goodsChooseList[i].value);
      var goodsChooseList1=document.getElementsByClassName('goods_choose'+goodsChooseList[i].value);//根据唯一class编号获得checkbox的id
      //alert('shangpin:'+goodsChooseList1[0].value);
      if(goodsChooseList1[0].checked){
        var goodsChooseList2=document.getElementsByClassName('good_num'+goodsChooseList[i].value);//根据checkbox id获得该商品的选购数量
        //alert('shuliang:'+goodsChooseList2[0].value);
        
          addToCartAll(goodsChooseList1[0].value,'',goodsChooseList2[0].value);
        
        
      }
    }
    
  }
  
}

function addToCartAll(goodsId, parentId,num)
{ 
  var goods        = new Object();
  var spec_arr     = new Array();
  var fittings_arr = new Array();
  var number       = num;
  var formBuy      = document.forms['ECS_FORMBUY'];
  var quick      = 0;

  // 检查是否有商品规格 
  if (formBuy)
  {
    spec_arr = getSelectedAttributes(formBuy);

    if (formBuy.elements['number'])
    {
      number = formBuy.elements['number'].value;
    }

  quick = 1;
  }

  goods.quick    = quick;
  goods.spec     = spec_arr;
  goods.goods_id = goodsId;
  goods.number   = number;
  goods.parent   = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);

  Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON',false);

}

好吧,就到这里了,也不是什么新鲜玩意,网上都一大把一大把的。

商品入库有问题时可以在tranport.js中开启调试模式

var Transport =
{
  /* *
  * 存储本对象所在的文件名。
  *
  * @static
  */
  filename : "transport.js",

  /* *
  * 存储是否进入调试模式的开关,打印调试消息的方式,换行符,调试用的容器的ID。
  *
  * @private
  */
  debugging :
  {
    isDebugging : 0,
    debuggingMode : 0,
    linefeed : "",
    containerId : 0
  },

  /* *
  * 设置调试模式以及打印调试消息方式的方法。
  *
  * @public
  * @param   {int}   是否打开调试模式      0:关闭,1:打开
  * @param   {int}   打印调试消息的方式    0:alert,1:innerHTML
  *
  */
将上面
isDebugging : 0
修改为:

isDebugging : 1

即可。
debuggingMode : 0,
是默认的alert模式,当等于1时是innerHTML模式,我竟然可耻的不会用,还望会的友友告知。

另外

Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON',false);

这个call函数在transport.js中,其中第五个参数是ajax请求时同步还是异步,默认是异步,这里传入false是指定为同步的意思,原因是发现在for循环中使用ajax异步请求时,商品入库竟然会存在某些商品不能入库或者数量不对(偏少)的问题。

求交流。求赐教。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡德咏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值