众所周知,帝国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,也可以改为其他方式。