教你在ecshop商城中实现一个经典实用的购物车功能
更新时间:2016-08-11 点击量:2062
Tag关键词: 经典 购物车 ecshop模板 ecshop4.0模板 二次开发 ecshop3.6模板 ecshop小程序
在购物流程页中,修改商品数量后可以自动更新购物车里的数据的功能,网上虽有少量方法,但是代码修改量比较大,而且考虑不是很周全,如礼品等的计算,数量框输入非数字字符后的反应等等。
优易软件觉得没有必要搞这么麻烦,代码多了反而影响速度。直接利用原来的“更新购物车”按钮和系统默认的判断并进行少量修改就能很安全简单的实现自动更新功能。
思路就是用一小段JS代码来代替更新按钮进行表单提交,在商品数量输入框代码中添加一个失去焦点触发上述JS的onblur事件,在flow.php的update_cart过程页中修改跳转,让其自动跳回flow.php而不显示修改信息即可。
以2.7.0版的default模版为例:
1.备份并修改模版目录下的 flow.dwt 文件:
(1) 在<head>之间添加一段JS,用于取代更新按钮实现表单提交: <script type="text/javascript">
function formSubmit() { document.getElementById("formCart").submit(); } </script>
(2) 在<body>之间找到诸如以下代码:
<!-- {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" style="text-align:center " onkeydown="showdiv(this)"/>
改成对象失去焦点时触发事件:onblur="formSubmit()" ,如:
<!-- {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" style="text-align:center " onblur="formSubmit()"/>
(3) 再找到下面的代码:
<input name="submit" type="submit" value="{$lang.update_cart}" />
把 这段代码删掉,就等于把“更新购物车”这个按钮删掉了。如果想保留该按钮,一定要把name="submit"中的submit改成其他名字,否则在 firebug下会报“submit is not a function”错误。原因是<form>之间如果有name="submit"的元素话,在用 document.getElementById("formCart").submit()提交表单的时候,该元素会和submit()方法发生混淆造 成该错误。
2.备份并修改根目录下的 flow.php 文件:
找到以下代码:
elseif ($_REQUEST['step'] == 'update_cart')
把
show_message($_LANG['update_cart_notice'], $_LANG['back_to_cart'], 'flow.php');
整行注释掉,
在它上面添加一行代码:ecs_header("Location: flow.php\n");
用于实现更新购物车自动跳转回详细页,如: elseif ($_REQUEST['step'] == 'update_cart')
{ /*------------------------------------------------------ */ //-- 更新购物车 /*------------------------------------------------------ */ if (isset($_POST['goods_number']) && is_array($_POST['goods_number'])) { flow_update_cart($_POST['goods_number']); } ecs_header("Location: flow.php\n"); // show_message($_LANG['update_cart_notice'], $_LANG['back_to_cart'], 'flow.php'); exit; }
完成!
如果文章对您有帮助,就打赏一个吧