众所周知,帝国cms的商城系统中,加入购物车时会自动跳转到购物车,如果我们只买一件东西还好,可如果要买几件十几件,就需要点击十几次,这样就会出现十几个购物车页面,即使没有这么夸张,跳转的方式对用户体验也并不友好。这里cms大学和大家分享一下帝国cms的商城模型中,将商品加入购物车时使用ajax无刷新的方法。
(本文章介绍的方法仅适合6.6及以前的帝国cms管理系统,7.0以后版本不适用。因涉及到附加属性问题,如无需此项也可继续使用。)
第一步:首先我们修改帝国cms商城栏目所属的内容页模板,在头部引入js
折叠XML/HTML 代码
- <script type="text/javascript" src="[!--news.url--]skin/default/js/jquery.js"></script>
 - <script type="text/javascript" src="[!--news.url--]skin/default/js/addBuyCar.js"></script>
 - <script type="text/javascript">
 - var newsurl='<?=$public_r[newsurl]?>';
 - </script>
 
第二步、接着将“加入购物车”按钮修改成如下代码:
折叠XML/HTML 代码
- <a href="#ecms" onclick="AddProduct([!--classid--],[!--id--]);">加入购物车</a>
 
第三部、将一下代码保存为addcar.js文件,存储在/skin/default/js/文件夹内。
折叠JavaScript 代码
- function AddProduct(classid,id) {
 - $.ajax({
 - type: "post",
 - url: newsurl+"e/template/ShopSys/addBuyCar.php",
 - data:"classid="+classid+"&id="+id,
 - dataType: "json",
 - success: function (json) {
 - alert(json.msg);
 - }
 - })
 - }
 
第四步、将以下代码保存为php文件,保存在e/template/ShopSys/addBuyCar.php,代码如下:
折叠PHP 代码
- <?php
 - require("../../class/connect.php");
 - require("../../class/db_sql.php");
 - require("../../data/dbcache/class.php");
 - require("../../class/ShopSysFun.php");
 - $link=db_connect();
 - $empire=new mysqlquery();//$_POST
 - $classid=(int)$_POST['classid'];
 - $id=(int)$_POST['id'];//add function
 - function json_AddBuycar($classid,$id){
 - global $class_r,$empire,$dbtbpre,$public_r;
 - $classid=(int)$classid;
 - $id=(int)$id;
 - if(emptyempty($classid)||emptyempty($id)||emptyempty($class_r[$classid][tbname]))
 - {
 - return json_encode(array('msgid'=>1,'msg'=>'此商品不存在'));
 - }
 - //验证产品是否存在
 - $num=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_".$class_r[$classid][tbname]." where classid='$classid' and id='$id' limit 1");
 - if(!$num)
 - {
 - return json_encode(array('msgid'=>1,'msg'=>'此商品不存在'));
 - }
 - $record="!";
 - $field="|";
 - $productid=$classid.",".$id;
 - $buycar=getcvar('mybuycar');
 - //重复
 - if(strstr($buycar,"|".$productid."|"))
 - {
 - $pr=explode("|".$productid."|",$buycar);
 - $pr1=explode("!",$pr[1]);
 - $oldbuycar="|".$productid."|".$pr1[0]."!";
 - //数量
 - $pr1[0]=ReturnBuycarProductNum($pr1[0]);
 - if(emptyempty($pr1[0]))
 - {
 - $pr1[0]=1;
 - }
 - $newnum=$pr1[0]+1;
 - $newbuycar="|".$productid."|".$newnum."!";
 - $buycar=str_replace($oldbuycar,$newbuycar,$buycar);
 - }
 - else
 - {
 - //只存放一个
 - if($public_r['buycarnum']==1)
 - {
 - $buycar='';
 - }
 - $buycar.="|".$productid."|1!";
 - }
 - $re=SetBuycar($buycar);
 - if($re)
 - {
 - return json_encode(array('msgid'=>2,'msg'=>'商品加入购物车成功'));
 - }
 - }
 - echo json_AddBuycar($classid,$id);
 - db_close();
 - $empire=null;
 - ?>
 
到这里就结束了,大家可以试一下效果,至于提示信息,以及信息弹出的方式,目前是alert,也可以改为其他方式。

