destoon购物车流程

2020-12-20 11:30:58

数据库结构

order表有个pid字段,如果有pid值不为空则代表是批量下单的。

添加购物车

  1. /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."')");
  1. 购物车下单 /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");
  1. 购物车结算,费用为第一个订单的amount

致知网络科技© 2020-2025 鲁ICP备20031360号-2