ecshop立即购买和加入购物车并存

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家

[p=28, 2, left]ecshop如何设置了购买停留在商品页面之后。将ecshop商品加入购物车的时候。就不会直接进入购物车。这样使用购物车非常不方便。我们为了既保持该页面功能,又能进入购物车功能。所以增加了另外一个购买按扭。点购买之后。可以直接进入ecshop的购物车。这样只牵涉到修改ecshop模板,二次开发难度大大降低。
1:goods.dwt模板文件
<a href="javascript:addToCart1({$goods.goods_id})"><img src="images/bnt_liji.gif" />

[p=28, 2, left]2:js/common.js
function addToCart1(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;

[p=28, 2, left]// 检查是否有商品规格
if (formBuy)
{
spec_arr = getSelectedAttributes(formBuy);

[p=28, 2, left] if (formBuy.elements['number'])
{
number = formBuy.elements['number'].value;
}

[p=28, 2, left] quick = 1;
}

[p=28, 2, left]goods.quick = quick;
goods.spec= spec_arr;
goods.goods_id = goodsId;
goods.number= number;
goods.parent= (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);

[p=28, 2, left]Ajax.call('flow.php?step=add_to_cart1', 'goods=' + goods.toJSONString(), addToCartResponse1, 'POST', 'JSON');
}

[p=28, 2, left]function addToCartResponse1(result)
{
if (result.error > 0)
{
// 如果需要缺货登记,跳转
if (result.error == 2)
{
if (confirm(result.message))
{
location.href = 'user.php?act=add_booking&id=' + result.goods_id + '&spec=' + result.product_spec;
}
}
// 没选规格,弹出属性选择框
else if (result.error == 6)
{
openSpeDiv(result.message, result.goods_id, result.parent);
}
else
{
alert(result.message);
}
}
else
{
var cartInfo = document.getElementById('ECS_CARTINFO');
var cart_url = 'flow.php?step=cart';
if (cartInfo)
{
cartInfo.innerHTML = result.content;
}
location.href = cart_url;

}
}
3:根目录下的flow.php

[p=28, 2, left]elseif ($_REQUEST['step'] == 'link_buy')上面添加

[p=28, 2, left]
elseif ($_REQUEST['step'] == 'add_to_cart1')
{
include_once('includes/cls_json.php');
$_POST['goods'] = json_str_iconv($_POST['goods']);

[p=28, 2, left] if (!empty($_REQUEST['goods_id']) && empty($_POST['goods']))
{
if (!is_numeric($_REQUEST['goods_id']) || intval($_REQUEST['goods_id']) <= 0)
{
ecs_header("Location:./\n");
}
$goods_id = intval($_REQUEST['goods_id']);
exit;
}

[p=28, 2, left] $result = array('error' => 0, 'message' => '', 'content' => '', 'goods_id' => '');
$json= new JSON;

[p=28, 2, left] if (empty($_POST['goods']))
{
$result['error'] = 1;
die($json->encode($result));
}

[p=28, 2, left] $goods = $json->decode($_POST['goods']);

[p=28, 2, left] /* 检查:如果商品有规格,而post的数据没有规格,把商品的规格属性通过JSON传到前台 */
if (empty($goods->spec) AND empty($goods->quick))
{
$sql = "SELECT a.attr_id, a.attr_name, a.attr_type, ".
"g.goods_attr_id, g.attr_value, g.attr_price " .
'FROM ' . $GLOBALS['ecs']->table('goods_attr') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('attribute') . ' AS a ON a.attr_id = g.attr_id ' .
"WHERE a.attr_type != 0 AND g.goods_id = '" . $goods->goods_id . "' " .
'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id';

[p=28, 2, left]$res = $GLOBALS['db']->getAll($sql);

[p=28, 2, left]if (!empty($res))
{
$spe_arr = array();
foreach ($res AS $row)
{
$spe_arr[$row['attr_id']]['attr_type'] = $row['attr_type'];
$spe_arr[$row['attr_id']]['name']= $row['attr_name'];
$spe_arr[$row['attr_id']]['attr_id']= $row['attr_id'];
$spe_arr[$row['attr_id']]['values'][] = array(
'label'=> $row['attr_value'],
'price'=> $row['attr_price'],
'format_price' => price_format($row['attr_price'], false),
'id'=> $row['goods_attr_id']);
}
$i = 0;
$spe_array = array();
foreach ($spe_arr AS $row)
{
$spe_array[]=$row;
}
$result['error']= ERR_NEED_SELECT_ATTR;
$result['goods_id'] = $goods->goods_id;
$result['parent'] = $goods->parent;
$result['message'] = $spe_array;

[p=28, 2, left]die($json->encode($result));
}
}


[p=28, 2, left] /* 检查:商品数量是否合法 */
if (!is_numeric($goods->number) || intval($goods->number) <= 0)
{
$result['error']= 1;
$result['message'] = $_LANG['invalid_number'];
}
/* 更新:购物车 */
else
{
// 更新:添加到购物车
if (addto_cart($goods->goods_id, $goods->number, $goods->spec, $goods->parent))
{
if ($_CFG['cart_confirm'] > 2)
{
$result['message'] = '';
}
else
{
$result['message'] = $_CFG['cart_confirm'] == 1 ? $_LANG['addto_cart_success_1'] : $_LANG['addto_cart_success_2'];
}

[p=28, 2, left]$result['content'] = insert_cart_info();
$result['one_step_buy'] = $_CFG['one_step_buy'];
}
else
{
$result['message']= $err->last_message();
$result['error'] = $err->error_no;
$result['goods_id'] = stripslashes($goods->goods_id);
if (is_array($goods->spec))
{
$result['product_spec'] = implode(',', $goods->spec);
}
else
{
$result['product_spec'] = $goods->spec;
}
}
}

[p=28, 2, left] $result['confirm_type'] =3;
die($json->encode($result));
}