ECShop——Ajax更新购物车商品数量
- 格式:doc
- 大小:80.00 KB
- 文档页数:12
指导老师:黄华毕业学校:清远职业技术学院ECShop简介是Comsenz公司推出的一款B2C独立网店系统,现已出售给ShopEX的开发商上海商派网络科技有限公司。
适合企业及个人快速构建个性化网上商店。
系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。
ECShop悉心听取每一位商家的需求与建议,不仅设计了人性化的网店管理系统帮助商家快速上手,还根据中国人的购物习惯改进了购物流程,实现更好的用户购物体验。
经过近两年的发展,ECShop网店系统无论在产品功能、稳定性、执行效率、负载能力、安全性和SEO支持(搜索引擎优化)等方面都居国内同类产品领先地位,成为国内最流行的购物系统之一。
ECShop功能介绍1. 灵活的模版机制ECShop开发了独有的高效模板引擎(2.15以前版本使用smarty模板引擎),并结合了Dreamweaver的模板和库功能,使得编辑制作模板变得更简单。
2. 开放的插件机制支付、配送,会员整合都是以插件形式实现。
商家可以随时增加或变更的支付方式和配送体系。
ecshop支持大部分php开发的论坛系统,包括discuz,phpwind 等,只需在后台做简单参数配置,即可完成会员整合。
3. 功能 AJAX 化ECSHOP 使用目前流行的 AJAX 技术,批量数据编辑变得更迅速,方便。
4. 促销功能ECSHOP提供了积分、红包、赠品,夺宝奇兵等多种促销方法。
5. 高效率的代码和执行性能通过优化代码与数据库结构,配合ecshop独家设计的缓存机制,在不考虑网速的情况下,网店动态页面与纯静态页面访问速度相当。
6. 常规功能的更完善实现针对常规功能尤其是后台管理和购物流程,ECShop进行了更简洁的设计,实现更好的用户体验。
7. 搜索引擎优化在 SEO (搜索引擎优化)上,ECShop独家支持两种 URL 重写方式,并且是同类软件中第一家支持 google/ yahoo / microsoft 三家共同发布的 sitemaps 0.9 网站索引规范,能够为站点被搜索引擎收录做到最大限度的支持和帮助。
ecshop购买数量加减控制修改优化
ecshop商品采购页里的采购数量默许是个文本框,假如需求采购的数量不是1件的话需求先在数量的文本框内填上所需求的件数,再点击参加购物车。
从用户体会的视点这不是太好,由于用户阅读网站时大多时分都运用鼠标,从细节的用户体会来思考,最佳不要让用户频频的在鼠标和键盘中切换操作。
而假如按默许ecshop模板及大多数开发的模板来看,都延用了ecshop自身的程序没有进行太多修正和优化。
从调查大型电商网站能够发现,一般它们运用的是在文本框邻近放置两个按钮,经过鼠标点击按钮来进行数量的增减。
本期咱们将来修正这个细节。
以买油画为例,点开一个商品页:,在采购数量的文本框里前后各有一个加减按钮,我是怎么做到的呢?放出代码:在商品详情页模板或详细购物框的库文件中,将代码:{$lang.number}{$lang.colon}
修正成{$lang.number}{$lang.colon}1){document.getElementById(“nu mber”).value–;}’ src=””>
onclick=’document.getElementById(“number”).value++;’src=””>我们能够对比增加的代码,应用到自个的模板上,然后自行调理css即可。
一起能够发现,那两个加减按钮其实是一个gif 图像。
完结这个修正后,采购体会比原先好了许多。
妙⽤Ajax技术实现局部刷新商品数量和总价实例代码1. 问题的分析 先看⼀下页⾯中的情况: 功能如上,在没有Ajax之前,⼀般都是根据⽤户修改的值去找Action,然后返回新的jsp页⾯重新加载整个页⾯,完成数字的更新。
但是有了Ajax技术后,我们可以利⽤Ajax技术局部刷新要改变的地⽅,⽽不是重新加载整个页⾯。
⾸先看⼀下上图对应的jsp部分的代码:<div class="section_container"><!-- 购物车 --><div id="shopping_cart"><div class="message success">我的购物车</div><table class="data-table cart-table" cellpadding="0" cellspacing="0"><tr><th class="align_center" width="10%">商品编号</th><th class="align_left" width="35%" colspan="2">商品名称</th><th class="align_center" width="10%">销售价格</th><th class="align_center" width="20%">数量</th><th class="align_center" width="15%">⼩计</th><th class="align_center" width="10%">删除</th></tr><c:forEach items="${sessionScope.forder.sorders }" var="sorder" varStatus="num"><tr lang="${sorder.product.id}"><td class="align_center"><a href="#" class="edit">${num.count }</a></td><td width="80px"><img src="${shop}/files/${sorder.product.pic}" width="80" height="80" /></td><td class="align_left"><a class="pr_name" href="#">${ }</a></td><td class="align_center vline">${sorder.price }</td><td class="align_center vline"><!-- ⽂本框 --><input class="text" style="height: 20px;" value="${sorder.number }" lang="${sorder.number }"></td><td class="align_center vline">${sorder.price*sorder.number }</td><td class="align_center vline"><a href="#" class="remove"></a></td></tr></c:forEach></table><!-- 结算 --><div class="totals"><table id="totals-table"><tbody><tr><td width="60%" colspan="1" class="align_left"><strong>⼩计</strong></td><td class="align_right" style=""><strong>¥<spanclass="price" id="total">${sessionScope.forder.total}</span></strong></td></tr><tr><td width="60%" colspan="1" class="align_left">运费</td><td class="align_right" style="">¥<span class="price" id="yunfei">0.00</span></td></tr><tr><td width="60%" colspan="1" class="align_left total"><strong>总计</strong></td><td class="align_right" style="">¥<span class="total" id="totalAll"><strong>${sessionScope.forder.total}</strong></span></td></tr></tbody></table><div class="action_buttonbar"><font><a href="${shop}/user/confirm.jsp"><button type="button" title="" class="checkout fr" style="background-color: #f38256;">订单确认</button></a></font><font><a href="#"><button type="button" title="" class=" fr"><font>清空购物车</font></button></font><a href="${shop}/index.jsp"><button type="button" title="" class="continue fr"><font>继续购物</font></button></a><div style="clear:both"></div></div></div></div> 看着貌似很多的样⼦,其实功能很简单,就是从域中拿出相应的数据显⽰出来⽽已,我们现在要实现上⾯描述的功能的话,先来分析⼀下思路:⾸先得注册⼀个事件:即修改了数量那⾥的⽂本框触发的事件;在该事件中,我们拿到⽤户输⼊的数,判断输⼊的合法性,因为要防⽌⽤户乱输⼊;如果合法,通过Ajax请求将数据发送到后台;后台针对新的数量,调⽤相应的业务逻辑⽅法得到新的结果,并将其通过流返回到前台;Ajax收到结果后,再对相应位置的数据进⾏更新。
购物车功能实现购物车功能是电商网站的重要组成部分,实现了方便用户选择和管理商品的功能,以下是购物车功能的实现方式:1. 添加商品:用户在浏览商品详情页时,可以通过点击“加入购物车”按钮将商品添加到购物车中。
后台服务器收到请求后,将商品信息和数量保存到数据库中。
2. 修改商品数量:用户可以在购物车页面修改商品的购买数量,通过增加或减少数量按钮来实现。
每次修改数量都会发送请求到后台,更新数据库中的商品数量。
3. 删除商品:用户可以选择删除购物车中的某个商品,通过点击删除按钮来实现。
后台服务器删除对应的商品记录,更新数据库。
4. 清空购物车:用户可以选择一键清空购物车,通过点击“清空购物车”按钮来实现。
后台服务器删除用户购物车中的所有商品记录,更新数据库。
5. 查看购物车:用户可以通过点击购物车图标或链接来查看购物车的详情页。
后台服务器根据用户的请求,从数据库中获取用户购物车中的商品列表,并返回给前端页面展示。
6. 购物车页面展示:购物车页面展示用户购物车中的商品列表,包括商品名称、价格、数量、小计和总计等信息。
用户可以通过修改数量、删除商品和清空购物车的操作来管理购物车。
7. 结算功能:用户在购物车页面可以选择结算功能,通过点击“结算”按钮来跳转到结算页面。
结算页面展示用户选择购买的商品,同时提供支付方式和地址选择等功能。
8. 购物车状态保存:购物车功能需要保证用户在不同设备、不同浏览器上的购物车状态同步,可以通过用户账户绑定购物车的方式实现。
用户登录后,将购物车信息与用户账户绑定,用户在不同设备上登录后购物车状态可以同步。
购物车功能的实现需要前端页面和后台服务器的配合,前端页面负责展示购物车信息并与用户交互,后台服务器负责处理前端页面的请求,更新数据库中的购物车信息。
同时需要考虑用户登录状态、商品库存、商品价格和促销活动等因素来优化购物车功能的实现。
ecshop商品详细页显示销量和商品评论数量的方法ecshop商品详细页显示销量和商品评论数量的方法第一步:.在ecshop程序goods.php页面最下面加入这两个函数function get_buy_sum($goods_id){$sql = 'SELECT IFNULL(SUM(g.goods_number), 0) ' .'FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS o, ' .$GLOBALS['ecs']->table('order_goods') . ' AS g ' ."WHERE o.order_id = g.order_id " ."AND o.order_status = '" . OS_CONFIRMED . "' " ."AND o.shipping_status " .db_create_in(array(SS_SHIPPED, SS_RECEIVED)) ." AND o.pay_status " .db_create_in(array(PS_PAYED, PS_PAYING)) ." AND g.goods_id = '$goods_id'";return $GLOBALS['db']->getOne($sql);}function get_comment_num($goods_id) {$sql= "select count(*) from".$GLOBALS['ecs']->table('comment')." whereid_value='".$goods_id."' AND status = 1";return $GLOBALS['db']->getOne($sql);} ecshop商品详细页显示销量和商品评论数量的方法第二步:.在ecshop程序goods.php中加入$smarty->assign('buy_num',get_buy_sum($goods_id));$smar ty->assign('comment_num',get_comment_num($goods_id)); 在$smarty->display('goods.dwt', $cache_id);之前哈!ecshop商品详细页显示销量和商品评论数量的方法第三步:.ecshop模板中的goods.dwt文件中加这个,大概在221行<!-- {if $buy_num} 已出售量--><li class="clearfix"><dd><strong>累计售出:</strong>{$buy_num}</dd></li><!--{/if}--><!-- {if $comment_num} 评论数量--><li class="clearfix"><dd><strong>评论数量:</strong><a href="#comment">{$comment_num}</a></dd></li><!--{/if}-->。
ecshop调用特定数量的特定分类的推荐、最新及精品商品最近都在搞ECSHOP的程序,网站建设过程中难免碰到网店等的网页网页设计,下面是关于ecshop调用特定数量的特定分类的推举产品的解决办法,数量的控制:【修改 lib_goods. 中 get_recommend_goods 函数, $num = get_library_number($data);挺直为$num赋值,就跳过了模板对推举数量的调用了】假如要自定义一个数量,在get_recommend_goods函数后多加一个可选参数,$rec_number=0 代码改为 if($rec_number==0) $num = get_library_number($data);ee $num = $rec_number; 关于分类的控制:在ind.php找到$smarty- assign( new_goods , get_recommend_goods( new )); // 最新商品修改为下面代码即可 $children = get_children(黄龙玉的大类ID); $smarty- assign( new_goods ,get_egory_recommend_goods( new , $children)); 试验胜利,详细步骤:【1、】lib_goods.php 函数get_category_recommend_goods,增强第三位参数$cat_num = 0 把$num =get_library_number($type2lib[$type]); 改为: if($cat_num==0) $num = get_library_number($type2lib[$type]); else $num = $cat_num; 【2、】index.php $children41 = get_children(41);第1页共1页。
ecshop的goodsattr和goodsattrid两个二次注入漏洞详细分析漏洞预警-电脑资料一:goods_attr_id的二次注入注入利用过程:1.添加商品到购物车时,写入注入代码到商品属性idPOST:goods={"quick":1,"spec":["163","158'"],"goods_id":32,"number":" 1","parent":0}注意,需要spec有两个或以上id2.在查看购物车页面,点击更新购物车,执行注入代码(二次注入嘛,单引号可用了)代码分析1./includes/lib_goods.php 942行function spec_price($spec){ if (!empty($spec)) { $where= db_create_in($spec, 'goods_attr_id'); //这里是注入位置,能控制$spec就可以了$sql = 'SELECT SUM(attr_price) AS attr_price FROM ' . $GLOBALS['ecs']->table('goods_attr') . " WHERE $where"; $price = floatval($GLOBALS['db']->getOne($sql)); } else { $price = 0; } return $price;}2./includes/lib_common.php 2266行get_final_price有spec_price的调用3.再看get_final_price方法的调用在ecshop/flow.php flow_update_cart方法,2272行/* 处理普通商品或非优惠的配件 */else { $attr_id = empty($goods['goods_attr_id']) ? array() : explode(',', $goods['goods_attr_id']); //看,$attr_id是读取的购物车商品的goods_attr_id字段,所以只要在添加商品到购物车时写入注入代码就可以了$goods_price = get_final_price($goods['goods_id'], $val, true, $attr_id); //更新购物车中的商品数量$sql = "UPDATE " .$GLOBALS['ecs']->table('cart'). " SET goods_number= '$val', goods_price = '$goods_price' WHERE rec_id='$key' AND session_id='" . SESS_ID . "'"; }二:good_attr的二次注入1.插入注入代码(goods_attr)至订单商品(/wholesale.php可以插入,即商品批发页面.2.将1生成的订单在用户中心订单查看页执行“放回购物车”操作,。
ecshop详情页和购物车购买数量前后添加加减ECSHOP开发中心()给数量框两侧添加“+”“-”按钮。
1、修改/js/common.js,在最后添加以下代码:/*** 购物车加减按钮* @param txt_id 数量的ID* @param type 加+ 减-* @param num 添加或者减少的数量默认为一*/function cart_number(txt_id, type, num){num = num || 1;var txt = document.getElementById(txt_id);var source_num = parseInt(txt.value);if (source_num == 1 && type == '-'){alert('请最少购买一个商品');return;}var to_num = source_num;if (type == '+'){to_num += num;}else if (type == '-'){to_num -= num;}txt.value = to_num;showdiv(txt);}复制代码2、修改模版文件夹下flow.dwt,添加以下代码:搜索goods_number 的input, 在input 两侧添加以下代码,其中“+”“-”也可以换成加号和减号的图片:<a href="javascript:cart_number('goods_number_{$goods.rec_id}', '-');">-</a><a href="javascript:cart_number('goods_number_{$goods.rec_id}', '+');">+</a>复制代码说明:这个修改方法是用在购物车页面,不过有个缺点是,它不是基于ajax,所以修改数量后要点“更新购物车”才可以。
购物车功能模块详解
购物车功能模块是现代电商网站中不可或缺的一部分。
通过购物车,消费者可以将多个商品添加到购物车中,随时查看商品列表和总价,方便管理和结算。
下面,我们来详细了解购物车功能模块。
1. 添加商品:用户在网站上选择商品后,点击“加入购物车”按钮,将商品添加到购物车中。
添加成功后,可以在购物车页面中看到商品的详细信息,如商品名称、价格、数量等。
2. 修改商品数量:在购物车页面中,用户可以通过增加或减少商品数量来修改订单。
系统会及时更新商品总价和数量。
3. 删除商品:如果用户不想购买某个商品,可以在购物车页面中将其删除。
删除后,系统会更新商品总价和数量。
4. 清空购物车:如果用户想一次性删除所有商品,可以点击“清空购物车”按钮,系统会将购物车中所有商品全部删除。
5. 结算商品:当用户选择完成购物后,可以点击“结算”按钮,进入订单确认页面。
在此页面中,用户需要填写收货地址、支付方式等信息,并核对订单信息。
确认无误后,可以点击“提交订单”按钮,完成购物流程。
总之,购物车功能模块是电商网站中非常重要的一部分,它可以提高用户的购物体验,增加购物的便利性和效率,为网站的商业成功打下坚实的基础。
- 1 -。
关于商品促销一人限购一件问题的解决方案ecshop做促销,如每人只限购1件控制ECSHOP的购买数量,在很多时候是必须的,而且当你有特别的需求的时候,控制数量显得格外重要。
需要在goods表中增加个字段"gc"控制购买数量首先,你需要在购买的时候,提示输入框,告诉用户,你必须购买多少.其次,购物车中需要修改购买数量的时候,你也需要控制。
1:详细页面中控制.在flow.php里面addto_cart中,加入以下代码,控制购买.$gc = $db -> getOne("select gc from ".$ecs->table('goods')." where goods_id = ".$goods ->goods_id);if ($goods->number%$gc) {$result['error'] = 1;$result['message'] = "购买数量必须输入{$gc}的倍数";}2:在common.js中增加函数function addToCart1(goodsId, parentId){var goods = new Object();var spec_arr = new Array();var fittings_arr = new Array();var number = 1;var t = "number"+goodsId;number = document.getElementById("number"+goodsId).value;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.toJS**tring(), addToCartResp**e, 'POST', 'JSON');}2:控制列表页面的购买.在列表页面中,增加一个框.<form action="javascript:addToCart1({$goods.goods_id})" method="post" name="ECS_FORMBUY{$goods.goods_id}" id="ECS_FORMBUY{$goods.goods_id}" >购买数量:<input name="number{$goods.goods_id}" type="text" id="number{$goods.goods_id}" value="1" size="4" class="formBorder"/><br /><a href="javascript:addToCart1({$goods.goods_id})"><img src="images/but_buy.jpg"></a><a href="javascript:;" id="compareLink"quotes"}','{$goods.type}')"><imgsrc="images/but_comp.jpg"></a></form>调用addToCart1函数.3:推荐页面在common.js中增加函数addT oCart2function addToCart2(goodsId, parentId){var goods = new Object();var spec_arr = new Array();var fittings_arr = new Array();var number = 1;var t = "number"+goodsId;number = document.getElementById("number_"+goodsId).value;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.toJS**tring(), addToCartResp**e, 'POST', 'JSON');}在recommend_new.lbi,recommend_best.lbi等页面中,需要增加输入框.调用次函数.<form action="javascript:addToCart2({$goods.id})" method="post" name="ECS_FORMBUY_{$goods.id}" id="ECS_FORMBUY_{$goods.id}" >购买数量:<input name="number_{$goods.id}" type="text" id="number_{$goods.id}" value="1" size="4" class="formBorder"/><br /><a href="javascript:addToCart2({$goods.id})"><imgsrc="images/but_buy.jpg"></a></form>最后完成了购买数量的控制。
更新说明:这次测试了2.7.2版本,发现有几处报错,原因是空格缺失,代码贴到一块了,导致报错,至于为何出现这种情况却是不知。
另:经测试2.7.2版本可以借鉴以下修改,差别在于代码所在行数不同而已,无关紧要。
--20120316ECShop版本:V2.7.3 RELEASE 20110907 (V2.7.2)涉及修改文件:1. themes\default\flow.dwt2. flow.php详细修改记录:1. themes\default\flow.dwt第一步:搜索<!-- {foreach from=$goods_list item=goods} -->,共有两处,这里取第一处(53行左右),将其下一行的<tr>修改成<tr id="tr_goods_{$goods.rec_id}">第二步:搜索<input type="text" name="goods_number[{$goods.rec_id}]"id="goods_number_{$goods.rec_id}" value="{$goods.goods_number}" size="4"class="inputBg" style="text-align:center " onkeydown="showdiv(this)"/>只有一处(91行左右),将其修改为<a href="javascript:void(0)" onclick="changenum({$goods.rec_id},-1)"><imgsrc="images/sub.png" style="vertical-align:middle;margin-bottom: 7px;" /></a><input type="text" name="goods_number[{$goods.rec_id}]"id="goods_number_{$goods.rec_id}" value="{$goods.goods_number}"size="4"class="inputBg" style="text-align:center" onchange="change_goods_number({$goods.rec_id},this.value)"/><a href="javascript:void(0)" onclick="changenum({$goods.rec_id},1)"><imgsrc="images/add.png" style="vertical-align:middle;margin-bottom: 7px;"/></a>第三步:搜索<td align="right" bgcolor="#ffffff">{$goods.subtotal}</td>只有一处(96行左右),将其修改为<td align=" right"bgcolor="#ffffff" id="goods_subtotal_{$goods.rec_id}">{$goods.subtotal}</td>第四步:搜索<!-- {if $discount gt 0} -->{$your_discount}<br /><!-- {/if} -->共两处,这里取第一处(108行左右,2.7.2版在110行左右),将其上一行<td bgcolor="#ffffff">修改为<td bgcolor="#ffffff" id="total_desc">第五步:搜索<input type="button" value="{$lang.clear_cart}" class="bnt_blue_1" onclick="location.href='flow.php?step=clear'" />(112行左右,2.7.2版在114行左右),将其删除第六步:搜索<!-- {if $er_id gt 0} -->只有一处(124行左右,2.7.2版在126行左右),在该行前面添加如下代码<script type="text/javascript">function changenum(rec_id, diff){var goods_number =Number($$('goods_number_' + rec_id).value) + Number(diff);change_goods_number(rec_id,goods_number);}function change_goods_number(rec_id, goods_number){Ajax.call('flow.php?step=ajax_update_cart', 'rec_id=' + rec_id+'&goods_number=' + goods_number, change_goods_number_response,'POST','JSON');}function change_goods_number_response(result){if (result.error == 0){var rec_id = result.rec_id;$$('goods_number_' +rec_id).value = result.goods_number;//更新数量$$('goods_subtotal_' +rec_id).innerHTML = result.goods_subtotal;//更新小计 if (result.goods_number <= 0){// 数量为零则隐藏所在行$$('tr_goods_' +rec_id).style.display = 'none';$$('tr_goods_' +rec_id).innerHTML = '';}$$('total_desc').innerHTML =result.total_desc;//更新合计if ($$('ECS_CARTINFO')){//更新购物车数量$$('ECS_CARTINFO').innerHTML = result.cart_info;}}else if (result.message != ''){alert(result.message);}}</script>2.flow.php第一步:搜索elseif ($_REQUEST['step'] == 'update_cart')只有一处(1800行左右,2.7.2版在1785行左右),在其前面添加如下代码/*------------------------------------------------------*///-- Ajax更新购物车add 20120118/*------------------------------------------------------*/elseif ($_REQUEST['step']== 'ajax_update_cart'){require_once(ROOT_PATH .'includes/cls_json.php');$json = new JSON();$result = array('error' => 0, 'message'=> '');if (isset($_POST['rec_id']) &&isset($_POST['goods_number'])){$key = $_POST['rec_id'];$val = $_POST['goods_number'];$val = intval(make_semiangle($val));if ($val <= 0 &&!is_numeric($key)){$result['error'] = 99;$result['message'] = '';die($json->encode($result));}//查询:$sql = "SELECT `goods_id`, `goods_attr_id`,`product_id`, `extension_code` FROM" .$GLOBALS['ecs']->table('cart')." WHERE rec_id='$key' AND session_id='" . SESS_ID . "'";$goods =$GLOBALS['db']->getRow($sql);$sql = "SELECT g.goods_name,g.goods_number "."FROM ".$GLOBALS['ecs']->table('goods'). " AS g, ".$GLOBALS['ecs']->table('cart'). " AS c "."WHERE g.goods_id =c.goods_id AND c.rec_id = '$key'";$row = $GLOBALS['db']->getRow($sql);//查询:系统启用了库存,检查输入的商品数量是否有效if(intval($GLOBALS['_CFG']['use_storage']) > 0 &&$goods['extension_code'] != 'package_buy'){if ($row['goods_number'] < $val){$result['error'] = 1;$result['message'] =sprintf($GLOBALS['_LANG']['stock_insufficiency'],$row['goods_name'],$row['goods_number'], $row['goods_number']);die($json->encode($result));}/* 是货品*/$goods['product_id'] = trim($goods['product_id']);if (!empty($goods['product_id'])){$sql = "SELECT product_number FROM " .$GLOBALS['ecs']->table('products'). " WHERE goods_id = '" . $goods['goods_id'] . "' AND product_id = '" .$goods['product_id'] . "'";$product_number =$GLOBALS['db']->getOne($sql);if ($product_number < $val){$result['error'] = 2;$result['message'] =sprintf($GLOBALS['_LANG']['stock_insufficiency'],$row['goods_name'],$product_number['product_number'], $product_number['product_number']);die($json->encode($result));}}}elseif (intval($GLOBALS['_CFG']['use_storage'])> 0 && $goods['extension_code'] == 'package_buy'){if(judge_package_stock($goods['goods_id'], $val)){$result['error'] = 3;$result['message'] =$GLOBALS['_LANG']['package_stock_insufficiency'];die($json->encode($result));}}/* 查询:检查该项是否为基本件以及是否存在配件*//* 此处配件是指添加商品时附加的并且是设置了优惠价格的配件此类配件都有parent_idgoods_number为1 */$sql = "SELECT b.goods_number,b.rec_idFROM ".$GLOBALS['ecs']->table('cart') . " a, ".$GLOBALS['ecs']->table('cart') . " bWHERE a.rec_id = '$key'AND a.session_id = '" .SESS_ID . "'AND a.extension_code <>'package_buy'AND b.parent_id = a.goods_idAND b.session_id = '" .SESS_ID . "'";$offers_accessories_res =$GLOBALS['db']->query($sql);//订货数量大于0if ($val > 0){/* 判断是否为超出数量的优惠价格的配件删除*/$row_num = 1;while ($offers_accessories_row=$GLOBALS['db']->fetchRow($offers_accessories_res)){if ($row_num > $val){$sql = "DELETE FROM" . $GLOBALS['ecs']->table('cart') ." WHERE session_id = '" . SESS_ID . "' " ."AND rec_id ='" . $offers_accessories_row['rec_id'] ."' LIMIT 1";$GLOBALS['db']->query($sql);}$row_num ++;}/* 处理超值礼包*/if ($goods['extension_code'] =='package_buy'){//更新购物车中的商品数量$sql = "UPDATE ".$GLOBALS['ecs']->table('cart')." SET goods_number= '$val' WHERE rec_id='$key' AND session_id='" . SESS_ID . "'";}/* 处理普通商品或非优惠的配件*/else{$attr_id = empty($goods['goods_attr_id']) ? array(): explode(',', $goods['goods_attr_id']);$goods_price =get_final_price($goods['goods_id'], $val, true, $attr_id);//更新购物车中的商品数量$sql = "UPDATE ".$GLOBALS['ecs']->table('cart')." SET goods_number= '$val', goods_price = '$goods_price' WHERE rec_id='$key' AND session_id='" . SESS_ID . "'";}}//订货数量等于0else{/* 如果是基本件并且有优惠价格的配件则删除优惠价格的配件*/while ($offers_accessories_row=$GLOBALS['db']->fetchRow($offers_accessories_res)){$sql = "DELETE FROM ". $GLOBALS['ecs']->table('cart') ." WHERE session_id= '" . SESS_ID . "' " ."AND rec_id ='" . $offers_accessories_row['rec_id'] ."' LIMIT 1";$GLOBALS['db']->query($sql);}$sql = "DELETE FROM ".$GLOBALS['ecs']->table('cart')." WHERE rec_id='$key' ANDsession_id='" .SESS_ID. "'";}$GLOBALS['db']->query($sql);/* 删除所有赠品*/$sql = "DELETE FROM " .$GLOBALS['ecs']->table('cart') . " WHERE session_id = '" .SESS_ID."' AND is_gift <> 0";$GLOBALS['db']->query($sql);$result['rec_id'] = $key;$result['goods_number'] = $val;$result['goods_subtotal'] = '';$result['total_desc'] = '';$result['cart_info'] =insert_cart_info();/* 计算合计*/$cart_goods = get_cart_goods();foreach ($cart_goods['goods_list'] as$goods ){if ($goods['rec_id'] == $key){$result['goods_subtotal'] =$goods['subtotal'];break;}}$shopping_money =sprintf($_LANG['shopping_money'],$cart_goods['total']['goods_price']);$market_price_desc= sprintf($_LANG['than_market_price'],$cart_goods['total']['market_price'],$cart_goods['to tal']['saving'], $cart_goods['total']['save_rate']);/* 计算折扣*/$discount = compute_discount();$favour_name = empty($discount['name'])? '' : join(',', $discount['name']);$your_discount =sprintf($_LANG['your_discount'],$favour_name,price_format($discount['discount']));if ($discount['discount'] > 0){$result['total_desc'] .=$your_discount . '<br />';}$result['total_desc'] .=$shopping_money;if ($_CFG['show_marketprice']){$result['total_desc'] .= ',' .$market_price_desc;}die($json->encode($result));}else{$result['error'] = 100;$result['message'] = '';die($json->encode($result));}}附两张箭头图片,上传至\themes\default\images\目录下即可至此全部修改完成示例网站:注:红色代码为所需添加的代码。