<button id="g80sy"></button>
  • <abbr id="g80sy"></abbr>
  • <button id="g80sy"></button>
    <rt id="g80sy"><delect id="g80sy"></delect></rt>
  • thinkphp6構(gòu)建購物車類

    程序猿 2021-03-15 20:51:44 2085瀏覽 加載中

    如何用PHP寫一個購物車類呢,下面我們來簡單分析學習下。

    代碼

    namespace app\common\helper;
    
    
    use app\common\model\Cart;
    use app\common\model\GoodsMain;
    
    class CartHelper
    {
        protected $cart;
        protected $cartList;
        public function __construct()
        {
            $this->cart = new Cart();
            $this->cartList = array();
        }
    
        // 添加到購物車
        public function push($good_main_id, $good_num)
        {
            if (!session("?user")) {
                $this->cartList = session('cartList');
                if (isset($this->cartList[$good_main_id])) {
                    $this->cartList[$good_main_id] = $this->cartList[$good_main_id] + $good_num;
                } else {
                    $this->cartList[$good_main_id] = $good_num;
                }
                session('cartList', $this->cartList);
            } else {
                $user = session('user');
                $cartList = $user->cart()->where('goods_main_id', '=', $good_main_id)->find();
                if ($cartList) {
                    $cartList->goods_num = $cartList->goods_num + $good_num;
                    $cartList->save();
                } else {
                    $user->cart()->save(["goods_main_id"=>$good_main_id, "goods_num"=>$good_num]);
                }
            }
        }
        // 刪除購物車
        public function del($good_main_id)
        {
            if (!is_array($good_main_id)) {
                $good_main_id[] = $good_main_id;
            }
    
            if (!session("?user")) {  // 未登錄用戶 刪除 session
                $this->cartList = session('cartList');
                foreach ($good_main_id as $id) {
                    if (isset($this->cartList[$id])) {
                        unset($this->cartList[$id]);
                    }
                }
                session('cartList', $this->cartList);
            } else {  // 登錄用戶  從數(shù)據(jù)庫中刪除購物車
                Cart::where([
                    ["goods_main_id","in", $good_main_id],
                    ["user_id", "=", session("user.id")],
                ])->delete();
            }
        }
        // 清空購物車
        public function clear()
        {
            if (!session("?user")) {
                session('cartList', null);
            } else {
                Cart::where([
                    ["user_id", "=", session("user.id")]
                ])->delete();
            }
        }
        // 購物車清單
        public function list()
        {
            if (session('?user')) {
                $user = session('user');
                $cartlist = $user->cart()->select();
                $list = array();
                if (!$cartlist->isEmpty()) {
                    foreach ($cartlist as $k=>$v) {
                        $good = GoodsMain::find($v->goods_main_id);
                        if ($good) {
                            $temp["good"] = $good;
                            $temp["goods_num"] = $v->goods_num;
                            $list[] = $temp;
                        }
                    }
                }
            } else {
                $cartlist = session('cartList');
                $list = array();
                if (!empty($cartlist)) {
                    foreach ($cartlist as $k=>$v) {
                        $good = GoodsMain::find($k);
                        if ($good) {
                            $temp["good"] = $good;
                            $temp["goods_num"] = $v;
                            $list[] = $temp;
                        }
                    }
                }
            }
            return $list;
        }
        // 合并購物車  登錄前和登錄后
        public function merge()
        {
            if (!session('?user') || !session('?cartList')) {
                return false;
            }
            $user = session('user');
            $cartList = session('cartList');
            $updateArr = array();
            foreach ($cartList as $k=>$v) {
                $cart = $user->cart()->where("goods_main_id","=",$k)->find();
                if ($cart) {
                    $updateArr[] = [
                        'id' => $cart->id,
                        'goods_main_id' => $k,
                        'goods_num' => $cart->goods_num + $v
                    ];
                } else {
                    $updateArr[] = [
                        'goods_main_id' => $k,
                        'goods_num' => $v
                    ];
                }
            }
            if (!empty($updateArr)) {
                $user->cart()->saveAll($updateArr);
            }
            session('cartList', null);
        }
    }

    分析

    添加購物車有兩種一情況,一種是用戶已經(jīng)登錄,另一種是沒有登錄。登錄的可以直接寫入數(shù)據(jù)庫,沒有登錄的可以用session保存。為了兼容兩種情況,所有操作都判斷了用戶是否登錄。還要考慮用戶原本購物車里已經(jīng)有產(chǎn)品,在沒有登錄前購物車里也有產(chǎn)品,在用戶登錄時需要進行合并操作,上面有代碼可以參考。

    保存到session的數(shù)據(jù)格式和用thinkphp6從數(shù)據(jù)庫里取出的數(shù)據(jù)格式是不一樣的,為了方便類的調(diào)用,也做了相應的處理。

    購物車里只保存了產(chǎn)品的ID和數(shù)量。

    雖然很簡陋,但這也是我能想出來的最好的了,一起加沒。

    最后修改:2025-03-23 19:23:13

    非特殊說明,本博所有文章均為博主原創(chuàng)。

    主站蜘蛛池模板: 海伦市| 偃师市| 旬阳县| 新源县| 垣曲县| 枣庄市| 昆明市| 墨脱县| 唐海县| 迁西县| 中宁县| 商洛市| 新乡市| 科技| 定安县| 凤城市| 牟定县| 抚州市| 疏勒县| 宁安市| 灌南县| 隆德县| 商都县| 上蔡县| 泰州市| 筠连县| 龙江县| 神池县| 额济纳旗| 轮台县| 娄底市| 安吉县| 大新县| 图木舒克市| 巴林左旗| 常宁市| 汉寿县| 长寿区| 堆龙德庆县| 张家川| 都江堰市|