1、比如我们category.dwt 里有
<a href='flow.php'><SPAN id='cart_count_all'>{insert
name='cart_info'}</SPAN></A>
<a onclick="javascript:addToCart_xaphp({$goods.goods_id});"
style="cursor: pointer;">添加购物车</a
我们现在需要实现点击按钮后页面不刷新去更新上面购物车数量
2、首先我们需要调入系统
{insert_scripts
files='transport.js,utils.js'}
这俩个js文件 是有关ajax实现效果的类问题 我们大可不去管 只需要调入
下来我们打开系统的common.js文件
进行添加我们自己的添加购物车函数
function addToCart_xaphp(goodsId, parentId)
{
var goods
= new Object();
var spec_arr = new Array();
var fittings_arr = new
Array();
var number = 1;
var formBuy =
document.forms['ECS_FORMBUY'];
var quick = 0;
// 检查是否有商品规格
goods.quick = quick;
goods.spec =
spec_arr;
goods.goods_id = goodsId;
goods.number =
number;
//goods.guige = guige;
goods.parent = (typeof(parentId) ==
"undefined") ? 0 : parseInt(parentId);
Ajax.call('flow.php?step=add_to_cart', 'goods=' +
goods.toJSONString(), addToCartResponse_xaphp, 'POST',
'JSON');
}
解释;a.点击按钮首先执行这个函数 获取我们的数据
ecshop二次开发整理Ecshop ajax应用讨论
b.
Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(),
addToCartResponse_xaphp, 'POST', 'JSON'); 这是局部执行
也就是无刷新执行flow.php?step=add_to+cart
同时把数据通过POST提交,有关json具体原理想研究的朋友可以去网上找资料。
c、addToCartResponse_xaphp回调函数很重要.
3、以上系统内部访问flow.php
那么我们当然要去flow.php
打开flow.php 我们找到 if($_REQUEST['step'] ==
'add_to_cart' ){ 添加购物车的程序
}
解释:a、我们通过POST传递了数据
在.php文件当然需要接收。首先我们要调入json处理数据文件 include_once('includes/cls_json.php'); 这个文件很重要
即 js 和php 直接通过一种方式俩者进行数据交互
b、$result =
array('error' => 0, 'message' =>
'', 'content' => '', 'goods_id' => ''); 这个也是我们常用的
默认定义数组。
c、$json = new JSON;声明json类
d、$goods =
$json->decode($_POST['goods']); 数据接收给$goods
4、
比如我们添加购物车成功 我们可以数组里定义
$result['error']=0; 就是把我们用到的数据放入$result数组
形象点 个人理解就是
通过 die($json->encode($result));数据传递给我们刚才的回调函数
下来我看回调函数的写法
function addToCartResponse_xaphp(result)
{
if
(result.error > 0)
{
// 如果需要缺货登记,跳转
if (result.error ==
2)
{
if (confirm(result.message))
{
location.href =
'user.php?act=add_booking&id=' + result.goods_id;
}
}
//
没选规格,弹出属性选择框
else if (result.error == 6)
{
openSpeDiv(result.message,
result.goods_id,
result.parent);
}
else
{
alert(result.message);
}
}
else
{
getCartNumber();
}
}
function
getCartNumber(){
Ajax.call('transport.php?act=cart_number', '',
getCartNumberResponse, 'GET', 'JSON');
}
解释:回调函数里我们又调用 getCartNumber()函数
在这个函数里我们又一次利用ajax查询购物车数量
transport.php代码
if($_REQUEST['act']
=='cart_number')
{
include_once('includes/cls_json.php');
//$_POST['goods']
= json_str_iconv($_GET['goods_id']);
$sql = 'SELECT SUM(goods_number) AS number, SUM(goods_price * goods_number)
AS amount' .
' FROM ' . $GLOBALS['ecs']->table('cart') .
" WHERE
session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS .
"'";
$row = $GLOBALS['db']->GetRow($sql);
if ($row)
{
$number = intval($row['number']);
$amount =
floatval($row['amount']);
}
else
{
$number = 0;
$amount =
0;
}
$json = new JSON;
$result['content'] =
$number;
die($json->encode($result));
}
然后在传回回调函数
function
getCartNumberResponse(result){
//alert(result.content);
var message =
'('+result.content+')';
document.getElementById('cart_count_all').innerHTML =
message;
}
好 我们接收数据库查询到的数量
然后通过innerHTML写入到 cart_count_all层 搞定。
分享到:
相关推荐
ECShop——Ajax更新购物车商品数量 支持版本V2.7.2/V2.7.3 RELEASE 20110907
ECSHOP仿淘宝添加购物车提示框效果
ecshop解决购物车ajax修改商品数量
ecshop商品列表页面筛选功能插件 仿淘宝
ecshop加入购物车效果插件,亲测可用
ECSHOP批量添加商品到购物车
ecshop中的ajax操作原理很详细希望能帮助大家
Ecshop首页或者其它页面调用购物车数量时一般只能显示数量,本插件可以实现显示购物车中商品图片列表。
ecshop 点击加入购物车弹出
ecshop更新购物车,实测好用,ecshop实时更新购物车。
ecshop购物车加减插件 购物车中增加+ - 按钮,控制商品购买数量,比原来输入数量,在点更新按钮方便很多。
ECSHOP 立即购买与加入购物车并存. 自己亲自修改, 思路简单, 非网上那些到处转来转去的文章.
ecshop右边悬浮购物车,可以用.
ecshop迷你购物车,已经经过测试,可以用,新手可以拿着用用
ecshop 手机购物车 多选多删除插件
addMessage()函数,旨在构造弹出框样式,创建div,addToCart()函数以ajax添加信息,之中用到addToCartResponse()函数,处理返回的信息,在购物页面,点击加入购物车 触发flow.php?step=cart’;在这里触发addMessage...
此插件完美基于ecshop本身自带一步购物功能,给每个商品页面加入“立刻购买”按钮,实现点击立刻购买按钮,直接跳过购物车页面,不用再到购物车“直接结算” 。同时保留加入购物车按钮功能,互不影响使用。 此功能...
ecshop 购物车加减插件,自己替换,或者根据自己的模板对比修改,自己用的。
下拉购物车加删除功能,谢谢大家支持