ecshop更新购物车数量ajax效果
- 格式:doc
- 大小:89.00 KB
- 文档页数:5
ajax的使用场景
Ajax是一种用于创建动态Web应用程序的技术。
它可以在不刷新整个页面的情况下更新部分页面内容,提高用户体验。
Ajax的使用场景很多,以下是一些典型例子:
1. 数据库查询:可以通过Ajax请求异步地向服务器请求数据,避免了页面刷新的影响,提升了用户体验。
2. 消息提示:通过Ajax可以在页面上展示实时的提示信息,比如新消息、新邮件等,提高了用户交互的效果。
3. 表单验证:通过Ajax可以实时验证用户提交的表单信息,比如用户名、密码、邮箱等,节省了用户的时间,避免了不必要的提交。
4. 搜索功能:通过Ajax可以实现无刷新搜索,用户可以在搜索框中输入关键字,后台返回数据后,页面会实时更新搜索结果,提升了用户体验。
5. 购物车功能:通过Ajax可以实现无刷新添加商品到购物车、删除商品等功能,使用户购物更加便捷。
总之,Ajax可以大大提高Web应用程序的交互性和响应速度,因此在实际开发中应用非常广泛。
- 1 -。
指导老师:黄华毕业学校:清远职业技术学院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收到结果后,再对相应位置的数据进⾏更新。
Ajax的工作原理Ajax的核心是JavaScript对象XmlHttpRequest。
该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。
简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
在创建Web站点时,在客户端执行屏幕更新为用户提供了很大的灵活性。
下面是使用Ajax可以完成的功能:* 动态更新购物车的物品总数,无需用户单击Update并等待服务器重新发送整个页面。
* 提升站点的性能,这是通过减少从服务器下载的数据量而实现的。
例如,在Amazon的购物车页面,当更新篮子中的一项物品的数量时,会重新载入整个页面,这必须下载32K的数据。
如果使用Ajax计算新的总量,服务器只会返回新的总量值,因此所需的带宽仅为原来的百分之一。
* 消除了每次用户输入时的页面刷新。
例如,在Ajax中,如果用户在分页列表上单击Next,则服务器数据只刷新列表而不是整个页面。
* 直接编辑表格数据,而不是要求用户导航到新的页面来编辑数据。
对于Ajax,当用户单击Edit时,可以将静态表格刷新为内容可编辑的表格。
用户单击Done之后,就可以发出一个Ajax请求来更新服务器,并刷新表格,使其包含静态、只读的数据。
一切皆有可能!但愿它能够激发您开始开发自己的基于Ajax的站点。
然而,在开始之前,让我们介绍一个现有的Web站点,它遵循传统的提交/等待/重新显示的范例,我们还将讨论Ajax如何提升用户体验。
Ajax可用于那些场景? 一个例子:MSN Money页面前几天,在浏览MSN Money页面的时候,有一篇关于房地产投资的文章引起了我的好奇心。
我决定使用站点的Rate this article (评价本文)功能,鼓励其他的用户花一点时间来阅读这篇文章。
在我单击vote按钮并等待了一会儿之后,整个页面被刷新,在原来投票问题所在的地方出现了一个漂亮的感谢画面。
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,所以修改数量后要点“更新购物车”才可以。
Ecshop更新购物车数量ajax效果ECSHOP开发中心()先打开flow.dwt,找到<!-- {if $goods.goods_id gt 0 && $goods.is_gift eq 0 && $goods.parent_id eq 0} 普通商品可修改数量-->,把下面的input框里面的替换成<a href="javascript:;"onclick="red_num({$goods.rec_id},{$goods.goods_id});"> - </a><inputtype="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 "onblur="change_price({$goods.rec_id},{$goods.goods_id})"/><ahref="javascript:;"onclick='add_num({$goods.rec_id},{$goods.goods_id})' >+</a>然后在下一个</td>后加一段js代码<script type="text/javascript" charset="utf-8">function add_num(rec_id,goods_id){document.getElementById("goods_number_"+rec_id+"").value++var number = document.getElementById("goods_number_"+rec_id+"").value; Ajax.call('flow.php', 'step=update_group_cart&rec_id=' + rec_id +'&number=' + number+'&goods_id=' + goods_id, changePriceResp**e, 'GET', 'JSON');}function red_num(rec_id,goods_id){if (document.getElementById("goods_number_"+rec_id+"").value>1){document.getElementById("goods_number_"+rec_id+"").value--;}var number = document.getElementById("goods_number_"+rec_id+"").value; Ajax.call('flow.php', 'step=update_group_cart&rec_id=' + rec_id +'&number=' + number+'&goods_id=' + goods_id, changePriceResp**e, 'GET', 'JSON');}function change_price(rec_id,goods_id){var number = document.getElementById("goods_number_"+rec_id+"").value; //alert(number);Ajax.call('flow.php','step=update_group_cart&rec_id=' + rec_id +'&number=' + number+'&goods_id=' + goods_id, changePriceResp**e, 'GET', 'JSON');}function changePriceResp**e(result){if(result.error == 1){alert(result.content);document.getElementById("goods_number_"+result.rec_id+"").value=result.number;}else{document.getElementById('subtotal_'+result.rec_id).innerHTML =result.subtotal;//商品总价document.getElementById('cart_amount_desc').innerHTML =result.cart_amount_desc;//购物车商品总价说明document.getElementById('market_amount_desc').innerHTML =result.market_amount_desc;//购物车商品总市价说明}}</script>接着把下一行的<td align="right" bgcolor="#ffffff" >{$goods.subtotal}</td>替换为<td align="right" bgcolor="#ffffff"id="subtotal_{$goods.rec_id}">{$goods.subtotal}</td>找到{$shopping_money}和{$market_price_desc},分别替换为<span id="cart_amount_desc">{$shopping_money}</span>和<span id="market_amount_desc">{$market_price_desc}</span>然后打开flow.php,在elseif ($_REQUEST['step'] == 'c**ignee')上面加这一段代码。
//二次开发,ajax更新购物车elseif($_REQUEST['step']=='update_group_cart'){include_once('includes/cls_json.php');$result = array('error' => 0, 'message' => '', 'content' => '', 'goods_id' => ''); $json = new JSON;$rec_id = $_GET['rec_id'];$number = $_GET['number'];$goods_id = $_GET['goods_id'];$result['rec_id'] = $rec_id;if ($GLOBALS['_CFG']['use_storage'] == 1){$goods_number = $GLOBALS['db']->getOne("select goods_number from".$GLOBALS['ecs']->table('goods')." where goods_id='$goods_id'");if($number>$goods_number){$result['error'] = '1';$result['content'] ='对不起,您选择的数量超出库存您最多可购买'.$goods_number."件";$result['number']=$goods_number;die($json->encode($result));}}$sql = "UPDATE " . $GLOBALS['ecs']->table('cart') . " SET goods_number ='$number' WHERE rec_id = $rec_id";$GLOBALS['db']->query($sql);/* 取得商品列表,计算合计*/$cart_goods = get_cart_goods();$subtotal = $GLOBALS['db']->getONE("select goods_price * goods_number AS subtotal from ".$GLOBALS['ecs']->table('cart')." where rec_id = $rec_id");$result['subtotal'] = price_format($subtotal, false);$result['cart_amount_desc'] = sprintf($_LANG['shopping_money'],$cart_goods['total']['goods_price']);$result['market_amount_desc'] = sprintf($_LANG['than_market_price'],$cart_goods['total']['market_price'], $cart_goods['total']['saving'],$cart_goods['total']['save_rate']);die($json->encode($result));}【ECSHOP开发中心】。