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
<div id="msg" style="display:none;width: 100%;height: 100%;position: fixed;top:0;opacity: 50%;;z-index: 999;">
    <div style="text-align:center;margin: 300px auto;border: 1px solid red;width: 300px;height: 130px;">


    </div>
</div>
<script>
    var goods_id = {$goods_data.id};//读取到当前产品的id
    /**
     * 加入购物车的方法  ajax提交
     */
    function addCart(){
        var num = $("#buy_num").val();//购买数量
        $.post("{:U('Goods/add_cart')}",{goods_id:goods_id,goods_num:num},function(data){
            if(data == -2){
                $("#msg").find("div").html("请求有误,请刷新后重拾");
            }else if(data == -1){
                $("#msg").find("div").html("请先登录后再进行购买");
                $("#msg").show('slow');
                window.location.href="{:U('User/login')}";//没有登录的话  直接跳转到登陆界面
            }else if(data == 0){
                $("#msg").find("div").html("加入购物车失败,请刷新后重试,或者尝试直接购买");
              //  alert("加入购物车失败,请刷新后重试,或者尝试直接购买");
            }else if(data == 1){
                $("#msg").find("div").html("加入购物车成功");
                //alert("加入购物车成功");
            }
            $("#msg").show('slow');
            setTimeout(function(){
                $("#msg").hide("slow");
            },1000);
        })
    }
</script>
点击立即购买 用js的方法将值传递过去
<button type="button" class="btn btn-danger">立即购买</button>
$(".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
选择地址
 <volist name="address_data" id="v">
<div class="m-order-item">
<a href="javascript:change({$v.id});" class="m-order-address">
<input class="a{$v.id}" type="radio" <if condition="$v['is_default'] eq 1">checked</if> name="address_id" value="{$v.id}">
{$v.name} {$v.tel}<span class="orange">[{$v.name}]</span>
<p>{$v.address}</p>
</a>


</div>
</volist>
<script>
    function change(id){
        $(".a"+id).click();
    }
</script>
<li>
<a href="{:U('Goods/detail',array('id'=>$goods_data['id']))}">
<img class="lazy pull-left" src="{$goods_data.img}" alt="">
<div class="m-cartlist-info">
<h3>{$goods_data.name}</h3>
<h4>{$goods_data.info}</h4>
<h5>¥{$goods_data.shop_price}</h5>
</div>
</a>
<span class="m-cartlist-nums">x {$num}</span>
</li>
支付方式仅限于支付宝
购物车:  新建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();
    }
}
在购物车视图中
<foreach name="data" item="v">
<li type="normal">
<a  href="{:U('Goods/detail',array('id'=>$v['goods_id']))}"  >
<img class="lazy pull-left" src="{$v.img}">
<div class="m-cartlist-info">
<h3>{$v.name}</h3>
<h4>{$v.info}</h4>
<h5>¥{$v.shop_price}</h5>
</div>
</a>
<span class="m-cartlist-delete" data-dismiss="alert">
<i class="glyphicon fdayicon fdayicon-delete"></i>
</span>
<div class="m-cart-numswrap">
<div class="num_sel_lage pull-right clearfix">
<span class="inC">-</span>
<input type="text" disabled="" name='qty' autocomplete='on' value="{$v.num}"  >
<span class="deC">+</span>
</div>
</div>
</li>
</foreach>
删除就是有ajax删除就可以了  自己做
<button type="button" class="btn btn-warning navbar-btn pull-right" οnclick="location.href='{:U(\'Cart/buy\')}'">去结算</button>  通过购物车点进结算中心
在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里面  市区县的下拉框删掉,到时候自己去找个插件,这是连动的
设为默认地址:
<input name="is_default" type="checkbox" class="onoffswitch-checkbox hide" id="myonoffswitch" value='1'>
地址类型删掉
<form class="form-horizontal m-order-address-form" role="form" method="post" action="{:U('User/add_address')}">

在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界面
<if condition="$num">   如果有$num传过来,说明是立即购买传过来的 这时购买单个商品
<li>
<a href="{:U('Goods/detail',array('id'=>$goods_data['id']))}">
<img class="lazy pull-left" src="{$goods_data.img}" alt="">
<div class="m-cartlist-info">
<h3>{$goods_data.name}</h3>
<h4>{$goods_data.info}</h4>
<h5>¥{$goods_data.shop_price}</h5>
</div>
</a>
<span class="m-cartlist-nums">x {$num}</span>
</li>
<else />   否则是购物车点击过来的, 这时购买多个商品
<volist name="data" id="v">
<li>
<a href="{:U('Goods/detail',array('id'=>$v['goods_id']))}">
<img class="lazy pull-left" src="{$v.img}" alt="">


<div class="m-cartlist-info">
<h3>{$v.name}</h3>
<h4>{$v.info}</h4>
<h5>¥{$v.shop_price}</h5>
</div>
</a>
<span class="m-cartlist-nums">x {$v.num}</span>
</li>
</volist>
</if>
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值