基于Laravel5.1实现购物车功能实例

发布时间:2017-03-11 编辑:小张个人博客 查看次数:4330

下面为各位介绍一篇关于Laravel 5.1 中实现购物车功能例子,希望这篇教程能够帮助到各位同学,有兴趣的朋友可以看一看。

前端界面只是简单的布局,重点是使用Laravel实现购物车的逻辑

<div class="container">
    <div class="row">
        <div class="col-sm-8 col-md-12">
            <div class="panel panel-default">
                <div class="panel-heading font-size" >购物车<span style="color: #ff0099;">列表</span></div>
                <div class="panel-body ul-list">
                    <table class="table table-striped">
                        <tr>
                            <th>#</th>
                            <th>标题</th>
                            <th>数量</th>
                            <th>价格</th>
                            <th>操作</th>
                        </tr>
                        @if($cart_items == '')
                            <tr>
                                <td>没有商品!</td>
                            </tr>
                        @else
                        @foreach($cart_items as $v)
                        <tr>
                            <td>{{$v->id}}</td>
                            <td>{{$v['product']->title}}</td>
                            <td>
                                <input type="text" size="2" name="count" value="{{$v->count}}" onchange="cart(this,{{$v->product_id}})"/>
                            </td>
                            <td>10</td>
                            <td>
                                <a href="javascript:void(0);" onclick="delcart({{$v->product_id}})">删除</a>
                            </td>
                        </tr>
                            @endforeach
                            @endif
                    </table>
                </div>
            </div>
        </div>
    <script>
    // 异步添加购物车
    function cart(obj,aid){
        var count = $(obj).val();
        if(aid ==""){return false;}
        $.ajax({
            type:"POST",
            url:'{{url('add_cart')}}',
            dataType: 'json',
            data:{aid:aid,count:count,_token:"{{csrf_token()}}"},
            success:function(msg){
                alert(msg);
            }
        });
    }
    // 异步删除购物车商品
    function delcart(id){
        if(id != ''){
            if(!confirm('您确认要删除吗?')){return false;}
            $.ajax({
                type:"POST",
                url : '{{url('delcart')}}',
                dataType: 'json',
                data:{id:id,_token:"{{csrf_token()}}"},
                success:function(msg){
                    if(msg.status == 1){
                        alert(msg.msg);
                        window.location.reload();
                    }else{
                        alert(msg.msg);
                    }
                }
            });
        }
    }

</script>

Laravel--添加购物车

public function addCart(Request $request){
    $aid = $request ->input('aid','');
    $shop_count = $request ->input('count','');
    // 如果当前用户已经登录
    $member = $request ->session()->get('member','');
    if($member !=''){
        $cart_items = Cart::where('member_id',$member->id)->get();
        $exist = false; // 用于标注COOKIE中的数据是否存在于数据库
        foreach($cart_items as $cart_item){
            // 判断末登录时购物车中product_id 是否存在 数据库中
            if($cart_item->product_id == $aid){
                // 判断$shop_count是否为空如果为空默认+1,不为空就是$shop_count数量
                $shop_count !=''? $cart_item -> count = $shop_count : $cart_item -> count ++ ;
                $cart_item -> save();
                $exist = true;
                break;
            }
        }
        // 如果不存在数据库中,就添加进数据库
        if($exist == false){
            $cart_item = new Cart();
            $cart_item ->product_id = $aid;
            $cart_item ->count = 1;
            $cart_item ->member_id = $member->id;
            $cart_item ->save();
        }
        return json_encode('添加成功!');
    }
    // 用户没有登录的情况下
    $shop_cart = $request->cookie('shop_cart');
    $shop_cart_arr = ($shop_cart != null ? explode(',',$shop_cart) : array());
    $count = 1; // 商品默认数据
    foreach($shop_cart_arr as &$value){ // 一定要传引用
        $index = strrpos($value,':'); // 商品个数
        if(substr($value,0,$index) == $aid){
            // 判断$shop_count是否为空如果为空默认+1,不为空就是$shop_count数量
            $count = $shop_count !=''? $shop_count : ((int) substr($value,$index + 1)) + 1;
           // $count =((int) substr($value,$index + 1)) + 1; // 商品数量+1;
            $value = $aid. ":".$count; // 改变购物车商品的数量
            break;
        }
    }
    // $conut是否 = 1  如果是就把商品加入到数组中
    if($count == 1){
        array_push($shop_cart_arr,$aid.":".$count);
    }
    $msg = $shop_count != '' ? '修改成功!' : '添加成功!';
    return response(json_encode($msg))->withCookie('shop_cart',implode(',',$shop_cart_arr));
}

Laravel--购物车列表

public function cart(Request $request){
    $cart_items = array();
    $shop_cart = $request ->cookie('shop_cart');
    $shop_cart_arr = $shop_cart !=null ? explode(',',$shop_cart) : array();
    // 判断用户是否登录
    $member = $request -> session() -> get('member','');
    if($member !=''){
        // 同步完成购物车 清空COOKIE
        $cart_items = $this -> syncCart($member->id,$shop_cart_arr);
        return response()->view('cart.cart_list',['cart_items' => $cart_items])->withCookie('shop_cart',null);
    }
    foreach($shop_cart_arr as $key =>$value){
        $index = strrpos($value,':');
        $cart_item = new Cart();
        $cart_item->id = $key;
        $cart_item -> product_id = substr($value,0,$index);// 商品id
        $cart_item ->count = ((int)substr($value,$index+1));// 商品数量
        $cart_item -> product = Article::find($cart_item -> product_id);
        if($cart_item != null){
            array_push($cart_items,$cart_item);
        }
    }
    return view('cart.cart_list')->with('cart_items',$cart_items);
}

实现购物车数据同步(用户登录后将COOKIE中商品数据写入数据库)

private function syncCart($mid,$shop_cart_arr){
    $cart_items = Cart::where('member_id',$mid)->get();
    $cart_items_arr = array();
    // 循环COOKIE中的商品数据
    foreach($shop_cart_arr as $val){
        $index = strpos($val,':');
        $product_id = substr($val, 0, $index);
        $count = (int) substr($val,$index + 1);
        $exist = false;// 用于标注COOKIE中数据是否存在数据库中
        // 循环查询出来的购物车商品数据
        foreach($cart_items as $temp){
            // 判断末登录时购物车中product_id 是否存在 数据库中
            if($temp -> product_id == $product_id){
                // 判断购物数量 如果小于COOKIE中的数量 就修改数据库中的数据
                if($temp->count < $count){
                    $temp -> count = $count;
                    $temp -> save();
                }
                $exist = true;
                break;
            }
        }
        // 不存在则存储进来
        if($exist == false){
            $cart_item = new Cart();
            $cart_item ->member_id = $mid;
            $cart_item ->product_id = $product_id;
            $cart_item ->count = $count;
            $cart_item -> save();
            $cart_item -> product = Article::find($cart_item ->product_id);
            array_push($cart_items_arr,$cart_item);
        }
    }
    // 为每个对像附加产品对像便于显示
    foreach($cart_items as $cart_item){
        $cart_item -> product = Article::find($cart_item ->product_id);
        array_push($cart_items_arr,$cart_item);
    }
    return $cart_items_arr;
}

Laravel--删除购物车商品数据

public function delcart(Request $request){
    $id = $request -> input('id','');
   // 用户登录的情况下
    $member = $request -> session()->get('member','');
    if($id ==''){
        return json_encode(['status'=>0,'msg'=>'操作有误,请重试!']);
    }
    if($member !=''){
        $res = Cart::where(['member_id'=>$member->id,'product_id'=>$id])->delete();
        if($res){
            return json_encode(['status'=>1,'msg'=>'删除成功!']);
        }else{
            return json_encode(['status'=>0,'msg'=>'删除失败,请重试!']);
        }
    }
    // 用户没登录的情况
    $shop_cart = $request ->cookie('shop_cart','');// 从cookie里面获取购物车数据
    $shop_cart_arr = ($shop_cart !=null ? explode(',',$shop_cart) : array());
    foreach($shop_cart_arr as $key =>$value){
        $index = strrpos($value, ':');
        $product_id = substr($value, 0 ,$index);
        // 存在删除
        if(in_array($product_id,[$id])){
            array_splice($shop_cart_arr,$key,1);
            continue;
        }
    }
    // 修改后的数据重新写入COOKIE
    return response(json_encode(['status'=>1,'msg'=>'删除成功!']))->withCookie('shop_cart',implode(',',$shop_cart_arr));
}


基于Laravel5.1实现购物车功能实例,以上代码还有很多不足的地方,但基本上完成了购物车常用功能如:添加、删除、修改等。希望对你所有帮助!


出处:小张个人博客

网址:http://blog.023xs.cn/

您的支持是对博主最大的鼓励,感谢您的认真阅读。欢迎转载,但请保留该声明。

顶部

Copyright © 小张个人博客 All Rights Reserved 渝ICP备15006773号-1

联系方式:[email protected] | 本站文章仅供学习和参考

渝公网安备 50024102500267号