您的位置:首页 > 编程语言 > PHP开发

tp --订单的生成

2015-12-14 12:23 676 查看
在订单确认界面的商品总价 goods/buy

商品总价 = 数量*单价

所以在 视图的 if判断的两个li红都加上

<input type="hidden" class="price" value="{$goods_data.shop_price}">

<input type="hidden" name="num" class="num" value="{$num}">

在js里面: 给li外面的ul添加上class="goods_list"

<script>

var total = 0;

$(".goods_list li").each(function(k,v){

var price = $(v).find(".price").val();

var num = $(v).find(".num").val();

total+=price*num; JS里面原本该是数字的 打印如果是NAN 表示你的计算里面有字符串

})

$("#goods_amount").text("¥"+total);

运费的话一般手机端 自己设定满多少钱就包邮

var send_price = 0; //运费

if(total<90){

send_price = 15; //满90包邮

}

$("#method_money").text("¥"+send_price);

$("#order_money").html("¥<span>"+(total+send_price)+"</span>"); //运费+总价

因为总价格和运费要返回到后台

<input type="hidden" name="total" id="total">

<input type="hidden" name="send_price" id="send_price">

$("#total").val(total);

$("#send_price").val(send_price);

</script>

因为总价格和运费要返回到后台

<input type="hidden" name="total" id="total">

<input type="hidden" name="send_price" id="send_price">

提交订单是要将地址商品等都要提交到后台

所以在section 标签外面添加form标签

<form action="{:U('Order/make')}" method="post">

</form>

如果是购买单个商品(就是从立即购买提交过来的) 应该在提交订单的时候返回其商品id 和购买商品数量 因为立即购买没有mysql表

所以子第一个li里面加上

<input type="hidden" name="goods_id" class="goods_id" value="{$goods_data.id}">

由于button 在form标签的外面,所以要点击提交按钮就执行提交 应该给button 标签添加 onclick="$('form').submit();"

<button type="button" onclick="$('form').submit();" class="btn btn-warning navbar-btn pull-right" id="order-submit">提交订单</button>

如果是购物车进去的就值需要提交 地址和总价

如果是立即购买进去就提交 地址 总价 数量 商品id

新建

namespace Home\Controller;

class OrderController extends BackController{

public function make(){

print_r($_POST);

$num = I("post.num",0,"int");

$address_id = I('post.address_id',0,"int");

$price = I('post.total',0,"number_float");

$send_price = I('post.send_price',0,"number_float");

$data['order_num'] = date("YmdHis").time().mt_rand(1000,9999);//自定义生成订单号

$data['create_time'] = time();//创建时间

$data['user_id'] = session("user.id");//用户id

$address = M("address")->where("id=".$address_id)->find(); //通过传过来的地址id查询出地址

$data['address'] = "姓名:".$address['name'].",电话:".$address['tel'].",详细地址:".$address['address'];

$data['price'] = $price;

$data['send_price'] = $send_price;

$data['status'] = 0;

if($num == 0){

//Array ( [address_id] => 2 [goods_id] => 1 [num] => 1 [total] => 17 )

//是购物车的订单提交

$cart = D("CartView");

$cart_data = $cart->where("cart.user_id=".session("user.id"))->select();

$data['goods'] = json_encode($cart_data);//直接把购物车的商品当作json存入

//清除购物车

M("cart")->where("user_id=".session("user.id"))->delete();

}else{

//是单个商品立即购买的订单提交

$goods_id = I("post.goods_id",0,"int");

$goods = M("goods");//为了方便我们后面对订单的处理 争取两种不同提交方式生成的goods格式一样

$goods_data = $goods->field("id,img,name,info,shop_price")->where("id=".$goods_id)->find();

$goods_data['goods_id'] = $goods_id;

$goods_data['num'] = $num;

$new_data[0] = $goods_data; 多维数组转换成json 和上面的 $cart_data格式一样

$data['goods'] = json_encode($new_data);

}

$order = M("order");

if($order->add($data)){

// $order_id = $order->getLastInsID();//得到新增的订单的id

//$this->success("生成订单成功",U("Order/sure",array('id'=>$order_id)));

$this->assign("data",$data);

$this->assign("total",$price+$send_price);

$this->display("sure");

}else{

$this->error("订单生成失败,请重新购买");

}

}

}

视图里面 新建Order 文件夹 将sure_order.html 放进去

订 单 号:{$data.order_num}

订单金额:¥{$total}

支付方式:支付宝

配送地址:{$data.address}

这样之后就暂时不管了,到时候用支付宝在做

回到首页,点击用户中心

在User控制器下面新建

public function index(){

$this->display("my");

}

在User视图里面放上 my.html 其他功能下来自己做

<a href="{:U('Order/index')}" class="user-order">我的订单</a>

点击我的订单

在Order控制器里面新建

public function index(){

视图里面my_order.html 里面,有三个状态 就上面的选项卡

//我们假设跳转状态等于0的 默认为0 未完成

$status = I("get.status",0,"int");

$order = M("order");

$data = $order->where("user_id=".session("user.id")." and status=".$status)->select();

foreach($data as $key=>$val){

$data[$key]['goods_arr'] = json_decode($val['goods'],true);

$data[$key]['goods_num'] = count($data[$key]['goods_arr']);

$data[$key]['total'] = $val['price'] + $val['send_price'];

}

$this->assign("status",$status);

$this->assign("data",$data);

$this->display(); 在视图里面将my_order.html 改为index.html 只要未完成的部分

}

视图里面

<section class="m-component-user" id="m-user">

<div class="m-userorder-tab">

<ul class="nav nav-tabs">

<li <if condition="$status eq 0">class="active"</if>><a href="{:U('Order/index',array('status'=>0))}">未完成</a></li>

<li <if condition="$status eq 1">class="active"</if>><a href="{:U('Order/index',array('status'=>1))}">已完成</a></li>

<li <if condition="$status eq 2">class="active"</if>><a href="{:U('Order/index',array('status'=>2))}">已取消</a></li>

</ul>

<div class="tab-content">

<div role="tabpanel" class="tab-pane fade in active m-user-order">

<div class="m-cartlist">

<ul class="list-unstyled">

<volist name="data" id="v">

<li>

<div class="m-orderinfo">

<span class="pull-right m-ordering">

<if condition="$v['status'] eq 0">未发货</if>

<if condition="$v['status'] eq 1">已发货</if>

<if condition="$v['status'] eq 2">已收获</if>

</span>

订单编号:{$v.order_num}

</div>

<foreach name="v['goods_arr']" item="val">

<a href="{:U('Goods/detail',array('id'=>$val['goods_id']))}">

<img class="lazy pull-left" src="{$val.img}">

<div class="m-cartlist-info">

<h3>{$val.name}X{$val.num}</h3>

<h4>{$val.info}</h4>

</div>

</a>

</foreach>

<div class="m-ordertotal">

<span>共 <strong>{$v.goods_num}</strong> 件商品 </span>

<span>实付款<strong>¥{$v.total}</strong></span>

</div>

<div class="m-orderfun" data-order="150406577377">

<button type="button" class="btn btn-default btn-sm btn-order-cancal" data-order='150406577377'>取消订单</button>

<button type="button" class="btn btn-warning btn-sm btn-order-pay" data-order='150406577377'>立即支付</button>

</div>

</li>

</volist>

</ul>

</div>

</div>

</div>

</div>

</section>

提交订单就是生成订单,一般总价格会一起提交过去

为了区分是通过购物车进入的购买界面还是点击立即购买进入的,在立即购买进入的界面的判断里面加几个隐藏的input存放单个商品的id和数量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: