通常商品的列表页会这样引入
<!-- #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异步请求时,商品入库竟然会存在某些商品不能入库或者数量不对(偏少)的问题。
求交流。求赐教。