destoon购物车流程
2020-12-20 11:30:58
数据库结构
order表有个pid字段,如果有pid值不为空则代表是批量下单的。
添加购物车
- /module/member/cart.inc.php
case 'add':
$s1 = isset($s1) ? intval($s1) : 0;
$s2 = isset($s2) ? intval($s2) : 0;
$s3 = isset($s3) ? intval($s3) : 0;
$a = isset($a) ? intval($a) : 1;
$code = $do->add($cart, $mid, $itemid, $s1, $s2, $s3, $a);
$id = is_array($itemid) ? end($itemid) : $itemid;
dheader('?action=show&mid='.$mid.'&id='.$id.'&code='.$code);
break;
cart.class.php里的add方法负责把产品信息拼接为字符串,写入购物车表,核心代码:
$k = $mid.'-'.$itemid.'-'.$s1.'-'.$s2.'-'.$s3;
if(isset($cart[$k])) {
$cart[$k] = $cart[$k] + $a;
} else {
$cart[$k] = $a;
}
set_cookie('cart', count($cart), DT_TIME + 30*86400);
$data = addslashes(serialize($cart));
DB::query("REPLACE INTO DT_PRE.'cart' (userid,data,edittime) VALUES ('$this->userid', '$data', '".DT_TIME."')");
- 购物车下单 /module/member/buy.inc.php,传递的商品,如下
[post] => Array
(
[16-2-0-0-0] => Array
(
[note] => 11
[number] => 2
[express] => 1
)
[16-1-0-0-0] => Array
(
[note] => 22
[number] => 1
[express] => 1
)
[16-2-3-0-0] => Array
(
[note] => 333
[number] => 1
[express] => 1
)
)
程序先把第一个产品写入作为父产品,然后插入其他产品把pid标记为父产品id,同时把第一个订单的amount设置为了全部订单之和,如:
$db->query("UPDATE {$DT_PRE}order SET `amount`=`amount`+$amount,`fee`=`fee`+$fee WHERE itemid=$pid");
- 购物车结算,费用为第一个订单的amount