TP-购物车

加入购物车,在点击加入购物车判断已经登陆之后
在GoodsController的add_cart() 里面 判断确实登陆了
//接收ajax传过来的值
$data['goods_id'] = I("post.goods_id",0,"int");
$data['num'] = I("post.goods_num",0,"int");
$data['user_id'] = session("user.id");
$cart = M("cart");
//先查询是否有这个人的这个商品
加入购物车的时候,同一个人同一个商品只存在一条数据
$old_data = $cart->where("user_id=".$data['user_id']." and goods_id=".$data['goods_id'])->find();
if($old_data){
//存在
$data['num'] += $old_data['num'];
if($cart->where("id=".$old_data['id'])->save($data)!==false){
echo 1;
}else{
echo 0;//加入失败
}
}else{
if($cart->add($data)){
echo 1;
}else{
echo 0;//加入失败
}
在detail.html里面的ajax里面补充
else if(data == 0){
   alert("加入购物车失败,请刷新后重试,或者尝试直接购买");
}else if(data == 1){
alert("加入购物车成功");
}


一般不用alert进行输出而是在下面写上一个100%的div,透明度设为0,这样网页里面的东西就不可点了,然后再再这个div里面键一个小的div


点击立即购买 用js的方法将值传递过去

$(".btn.btn-danger").click(function(){
var num = $("#buy_num").val();//购买数量
window.location.href="{:U('Goods/buy')}?goods_id="+goods_id+"&num="+num;
})
/**
     * 点击立即购买时的界面   立即购买之只针对单个商品,如果是点击购物车进去就是多个商品
     */
    public function buy(){
        $id = I("get.goods_id",0,"int");
        $num = I("get.num",0,"int");
        //看有没有登陆
        if(session("?user")){
//看你有没有收货地址
            $address = M("address");
            $address_data = $address->where("user_id=".session("user.id"))->select();
            if($address_data){
                $goods = M("goods");
                $goods_data = $goods->field("id,name,img,info,shop_price")->where("id=".$id)->find();
                $this->assign("address_data",$address_data);
                $this->assign("goods_data",$goods_data);
                $this->assign("num",$num);
                $this->display();  (order.html)
            }else{
                //没有收货地址  我需要进行添加
                $this->error("请先添加收获地址",U('User/add_address'));  (看下面)
            }
        }else{
            $this->error("请先登录后在购买",U('User/login'));
        }
    }
在视图里面order.html  将名字改为buy
选择地址
 







  • {$goods_data.name}


    {$goods_data.info}


    ¥{$goods_data.shop_price}



    x {$num}

  • 支付方式仅限于支付宝
    购物车:  新建CartController   由于购物车里面的所有方法都需要判断是否登陆
    所以新建
    namespace Home\Controller;
    use Think\Controller;
    class BackController extends Controller{
        public function __construct(){
            parent::__construct();
            if(!session("?user")){
                $this->error("请先进行登录",U("User/login"));
            }
        }
    }
    新建视图模型
    namespace Home\Model;
    use Think\Model\ViewModel;
    class CartViewModel extends ViewModel{
        public $viewFields = array(
            'cart'=>array('id','num'),//主表以及要查询的字段       'goods'=>array('id'=>'goods_id','img','name','info','shop_price','_on'=>'cart.goods_id=goods.id'),
        );
    }
    在CartController中
    namespace Home\Controller;
    use Think\Controller;
    class CartController extends BackController{
        public function index(){
            $cart = D("CartView");
            $data = $cart->where("cart.user_id=".session("user.id"))->select();
            //print_r($data);
            $this->assign("data",$data);
            $this->display();
        }
    }
    在购物车视图中





  • {$v.name}


    {$v.info}


    ¥{$v.shop_price}








    -

    +




  • 删除就是有ajax删除就可以了  自己做
     通过购物车点进结算中心
    在CartController中新建
    public function buy(){
            $address = M("address");
            $address_data = $address->where("user_id=".session("user.id"))->select();
            if($address_data){
                $cart = D("CartView");
                $data = $cart->where("cart.user_id=".session("user.id"))->select();
                $this->assign("address_data",$address_data);
                $this->assign("data",$data);
                $this->display("Goods:buy");
            }else{
                $this->error("请先添加收获地址",U('User/add_address'));
            }


        }
    在add_address.html里面  市区县的下拉框删掉,到时候自己去找个插件,这是连动的
    设为默认地址:

    地址类型删掉


    在UserController里面添加
    public function add_address(){
    if(session("?user")){
    添加完收货地址应该跳回到前一个页面
    if(!(strstr($_SERVER['HTTP_REFERER'],"User/add_address"))){
    setcookie("prev_href",$_SERVER['HTTP_REFERER']);
    }   
    if(IS_POST){
    $address = M("address");
    $data['name'] = I("post.name","","addslashes");
    $data['address'] = I("post.address","","addslashes");
    $data['tel'] = I("post.tel","","addslashes");
    $data['is_default'] = I("post.is_default",0,"int");
    //记住  一个人的默认地址只有一个  如果is_default是1的话  你需要先去修改原来的默认地址为0
    if($data['is_default'] == 1){
    $new_data['is_default'] = 0;
    $address->where("user_id=".session("user.id")." and is_default=1")->save($new_data);
    }
    $data['user_id'] = session("user.id");
    if($address->add($data)){
    if($_COOKIE['prev_href']){
    $this->success('新增成功',$_COOKIE['prev_href']);
    }else{
    $this->success('新增成功',U('User/address_list'));
    }
    }else{
    $this->error("新增失败");
    }
    }else{
    $this->display();
    }
    }else{
    $this->error("请先登录后在添加收货地址",U('User/login'));
    }
    }
    在goods的buy界面
      如果有$num传过来,说明是立即购买传过来的 这时购买单个商品




  • {$goods_data.name}


    {$goods_data.info}


    ¥{$goods_data.shop_price}



    x {$num}

  •   否则是购物车点击过来的, 这时购买多个商品







  • {$v.name}


    {$v.info}


    ¥{$v.shop_price}



    x {$v.num}


  • 你可能感兴趣的:(php,开发应用)