AJAX更新购物车数据
2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家
先贴出2个图 第一个图可以同时更新积分和价格,当然积分和人民币只能一种支付类型,第二个图是很多大众的需要了。 1.先编写js函数,该函数还有很多地方可以优化比如最大购买数量,一种的固定的最大数量,一种的以库存为准,在此没有主要的** /* * 通过AJAX使商品购物车页面数量增加的同时价格也变化函数 liangfang add * act 增加还是减少 rec_id 购物车idmaxnumber 每次最大购买量 可略 ,total 总量,maxnumber,total */ function update_cart_num(act,rec_id) { var num_id='goods_number_'+rec_id;//被改变数量的商品 var num = document.getElementById(num_id); if( (!Utils.isInt(num.value))) return; else { if(act=="increase"){ num.value = parseInt(num.value) + 1; if(num.value>=99)num.value=99; } else if(act=="reduce"){ num.value = parseInt(num.value) - 1; if(num.value<=1)num.value=1; } Ajax.call('flow.php?step=update_cart', 'goods_number['+rec_id+']= ' + num.value, updateCartResp**e, 'POST', 'TEXT'); // liangfang edit } } function updateCartResp**e(result){ var res=eval('('+result+')');//转化字符串为json对象 var num_id='goods_number_'+res.rec_id;//被改变数量的商品 var num = document.getElementById(num_id); var subtotal_id='subtotal_'+res.rec_id;//被改变数量商品的小计金额 var subtotal = document.getElementById(subtotal_id); var shopping_money = document.getElementById("shopping_money"); //var market_price_desc = document.getElementById("market_price_desc");//暂时不需要市场价 var integral_id='integral_'+res.rec_id;//被改变数量商品的积分,(该商场不能积分和人民币同时使用 ) var integral = document.getElementById(integral_id); if(res.err_msg==1){ num.value=1; Ajax.call('flow.php?step=update_cart', 'goods_number['+rec_id+']= ' + num.value, updateCartResp**e, 'POST', 'TEXT'); // liangfang edit } else{ if(integral===null) { subtotal.innerHTML=res.subtotal;//此处不是很理想,应该返回一个标准的形如:¥ 100.00左右的字符串 shopping_money.innerHTML=res.shopping_money; } else integral.innerHTML=res.integral+'积分'; } } 不需要积分部分的内容大家可以删除掉,或和我索取 2.flow.php 文件的修改。不需要积分的可以注释掉 /*------------------------------------------------------ */ //-- 更新购物车 //-- 改用AJAX方式更新购物车 liangfang edit 20120810 /*------------------------------------------------------ */ elseif ($_REQUEST['step'] == 'update_cart') { include('includes/cls_json.php'); $json= new JSON; $res = array('err_msg' => '', 'rec_id' => '','subtotal'=> '','shopping_money'=> '','shopping_money'=> 'market_price_desc'); $_POST['goods_number'] = json_str_iconv($_POST['goods_number']); //$_POST['goods_number']=$json->object_to_array($_POST['goods_number']); if (isset($_POST['goods_number'])&& is_array($_POST['goods_number'])) { //经过修改该函数,该函数会返回小计金额,失败返回0 if(!flow_update_cart($_POST['goods_number'])){ $res['err_msg']=1; $res['rec_id']=key($_POST['goods_number']);//获得这个数组的键值 } else{ $cart=flow_update_cart($_POST['goods_number']); $res['rec_id']=key($_POST['goods_number']);//获得这个数组的键值 $res['subtotal']=$cart['subtotal']; $res['shopping_money']=sprintf($_LANG['shopping_money'], $cart['shopping_money']); $res['integral']=$cart['integral'];//积分 $res['market_price_desc']=sprintf($_LANG['than_market_price'], $cart['formated_market_price'], $cart['formated_saving'], $cart['save_rate']); $res['err_msg']=0; } die($json->encode($res)); } } 其中对其中的一个函数进行了修改:flow_update_cart 这个函数内容比较多,我只能把修改部分贴出来。其中有一个判断是购物车大于0的情况,加在这个if判断最后就行 /***liangfang add start***/ $order = flow_order_info(); /* 取得购物类型 */ $flow_type = isset($_SESSION['flow_type']) ? intval($_SESSION['flow_type']) : CART_GENERAL_GOODS; $cart_goods = cart_goods($flow_type); // 取得商品列表,计算合计 $c**ignee = get_c**ignee($_SESSION['user_id']); /* * 计算订单的费用 */ $total = order_fee($order, $cart_goods, $c**ignee); $update_cart['shopping_money']=$total['formated_goods_price'];//购物车总价 $update_cart['formated_market_price']= $total['formated_market_price'];//市场价格 $update_cart['formated_saving']=$total['formated_saving'];//节省价格 $update_cart['save_rate']=$total['save_rate'];//节省百分比 $update_cart['subtotal']= price_format($goods_price*$val, false);//购物车每件商品的小计数据 liangfang edit $update_cart['integral']=$total['integral'];//获得积分 /***liangfang add end***/ 3.对flow.dwt 模板的修改 <!-- {if $goods.goods_id gt 0 && $goods.is_gift eq 0 && $goods.parent_id eq 0} 普通商品可修改数量 --> <input type="text" name="goods_number[{$goods.rec_id}]" id="goods_number_{$goods.rec_id}" value="{$goods.goods_number}" size="4" class="f_l B_input" style="margin-left:15px; height:20px; line-height:20px; text-align:center" /> <div class="f_l flow_arrow"> <a href="javascript:void(0);"><div class="flow_goods_up"></div></a> <a href="javascript:void(0);"><div class="flow_goods_down"></div></a> </div> <!-- {else} --> {$goods.goods_number} <!-- {/if} --> </td> <!---{if $goods.sub_integral}是否有积分商城的商品---> <td align="center" id="integral_{$goods.rec_id}" bgcolor="#ffffff">{$goods.sub_integral}积分</td> <!---{else}---> <td align="center" id="subtotal_{$goods.rec_id}" bgcolor="#ffffff">{$goods.subtotal}</td> <!--{/if}--> 主要是对标签ID的控制盒函数的触发,主要我们就完成了全部AJAX来更新购物车的需求了。 不明白的地方可以加我QQ 9468802 |
回答:
贴图都没看见也不知道什么情况 代码还一大堆 更不看了 |
最近更新
常用插件
- ecshop商品分类名称增加样
ecshop插件介绍:本插件可以方便在后台管理,为ecshop商品分类名称增加样...
- ecshop二次商品订购人信息
ecshop二次商品订购人信息填写插件,有时候给朋友送花,或者是送礼品的...
- ecshop2.7.1打印发货单插件
ecshop2.7.1打印发货单插件介绍:ecshop2.7.1和以前的ecshop版本不一样,ecs...
- ecshop二次开发详细页面生
插件介绍: ECSHOP系统,在很多时候,很多商品没有人购买,不但购买的人...
- ecshop分类批量扩展插件
ecshop分类批量扩展插件,这个插件是ecshop插件里面比较核心的插件。我们...
ecshop热门问答
ecshop热门资料
ecshop病毒
ecshop支付宝
ecshop加入收藏夹
ecshopbigsalong
ecshop首页添加文章
ecshop扩展函数
ecshopDISCUZ论坛
ecshop应用程序
ecshopBeyond
ecshop卖否
ecshop安装数结束错误
ecshop广电
gucci sunglasses
ecshop淘宝商品
ecshop选购中心
ecshop新安裝
HDwiki模板
centos
ecshopfittings
ecshop模板结构电子书
ecshopmoneybookers
ecshop738
ecshop会员管理
ecshop添加商品
ecshop蜘蛛
ecshop必填项
ecmal常见问题
ecshop选配
ecshopwidget
ecshop商品页面title