在购物流程页中,修改商品数量后可以自动更新购物车里的数据的功能,网上虽有少量方法,但是代码修改量比较大,而且考虑不是很周全,如礼品等的计算,数量框输入非数字字符后的反应等等。
我个人觉得没有必要搞这么麻烦,代码多了反而影响速度。直接利用原来的“更新购物车”按钮和系统默认的判断并进行少量修改就能很安全简单的实现自动更新功能。
思路就是用一小段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()
{
}
</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.getElementByIdx_x(“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;
}
好啦,大功告成。

下一篇:dedecms5.6 多级栏目无限嵌套调用