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 HomeController;
use ThinkController;
class BackController extends Controller{
public function __construct(){
parent::__construct();
if(!session("?user")){
$this->error("请先进行登录",U("User/login"));
}
}
}
新建视图模型
namespace HomeModel;
use ThinkModelViewModel;
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 HomeController;
use ThinkController;
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" onclick="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>
在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 HomeController;
use ThinkController;
class BackController extends Controller{
public function __construct(){
parent::__construct();
if(!session("?user")){
$this->error("请先进行登录",U("User/login"));
}
}
}
新建视图模型
namespace HomeModel;
use ThinkModelViewModel;
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 HomeController;
use ThinkController;
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" onclick="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>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Mysql按字段分组取最大值记录
- 下一篇: laravel Route 用法