TP -- 订单的导出
进入后台--订单管理
在后台新建 Order控制器
class OrderController extends BackController{
public function index(){
$order = M("order");//你们需要分页
$data = $order->order("create_time desc")->select();
$this->assign("data",$data);
$this->display();
}
}
在视图里面新建Order文件夹 复制其他控制器的视图里面的index过去
<tr>
<th align="center" width="5%"><input type="checkbox"></th>
<th align="center" width="20%">地址</th>
<th align="center" width="20%">商品价格/运费</th>
<th align="center" width="20%">下单时间</th>
<th align="center" width="20%">状态</th>
<th width="15%">管理操作</th>
</tr>
<tbody>
<volist name="data" id="vo">
<tr id="tr{$vo.id}">
<td align="center"><input type="checkbox" value="{$vo.id}"></td>
<td align="center">{$vo.address}</td>
<td align="center">{$vo.price}/{$vo.send_price}</td>
<td align="center">{$vo.create_time|date="Y-m-d H:i:s",###}</font></td>
在模板层把时间戳转化为时间字符串 {$vo.create_time|date="Y-m-d",###}
<td align="center">
<if condition="$vo['status'] eq 0">
<span style="color: red">未支付</span>
<elseif condition="$vo['status'] eq 1" />
<span style="color: blue">未发货</span>
<else />
<span style="color: green">已收获</span>
</if>
</td>
<td align="center">
<a href="{:U('Order/edit',array('id'=>$vo['id']))}" class="J_showdialog">编辑</a>
|<a href="javascript:del({$vo.id})">删除</a></td>
</tr>
</volist>
</tbody>
编辑功能:
在OrderController中新建
public function edit(){
if(IS_POST){
$order = M("order");
$id = I("post.id",0,"int");
if($order->create()){
if($order->where("id=".$id)->save()!==false){
$this->success("保存成功",U("Order/index"));
}else{
$this->error("保存失败",U("Order/index"));
}
}else{
$this->error($order->getError());
}
}else{
$id = I("get.id",0,"int");
$data = M("order")->where("id=".$id)->find();
$this->assign("data",$data);
$this->display();
}
}
在视图里面 新建edit文件
<form action="{:U('Order/edit')}" method="post" id="info_form" onsubmit="return check_form();">
<input type="hidden" name='id' value="{$data.id}">
在视图里面有
订单号 :{$data.order_num}
地址 :
订单只有在未支付的时候才能进行价格的修改
订单只能在未支付或者未发货时才能修改地址
<if condition='$data["status"] lt 2'>
<input type="text" style="width: 600px" name="address" value="{$data.address}">
<else />
{$data.address}
</if>
价格 :<input type="text" name="price" value="{$data.price}">
运费 :<input type="text" name="send_price" value="{$data.send_price}">
还有物流 状态等这些都可以修改,就自己下去做
订单的导出: 在收获的时候,包裹里面有个订到纸条 下单之后(配送员和拍货员是看不到后台) 所以需要把订单导出成excel表
phpexcel插件 php导出或者导入excel的第三方类库
导出选中的: 在index.html里面的复选框
<input type="checkbox" id="all_check" onclick="change_all()"> 导航里面的复选框
(jquery)function change_all(){
if($("#all_check").attr("checked")=="checked"){
//全部需要选中
$("input[type='checkbox']").attr("checked","checked");
}else{
$("input[type='checkbox']").attr("checked",false);
// $("input[type='checkbox']").removeAttr("checked");
}
}
导出需要按钮 将以前的添加按钮 改成 导出选中订单
<a href="javascript:put_out();" class="add fb J_showdialog"><em>导出选中订单</em></a>
function put_out(){
var all = $("tbody input[type='checkbox']:checked");
$("对象:checked")选中的多选框
.length 符合条件的对象的个数
if(all.length!=0){ //判断下面是否有选中订单 如果没有选中的就没有必要执行导出
//进行导出操作
var id_str = '';
all.each(function(k,v){ //$(v).val() 订单的id
id_str += $(v).val()+',';
})
//alert(id_str);
window.location.href='{:U("Order/out_put")}?id_str='+id_str;
}else{
alert("你没有选中任何订单");
}
}
在order控制器里面
public function out_put(){
$id_str = I("get.id_str","","addslashes");
//echo $id_str;
//sql关键字 in
//select * from `表名` where id in(3,2,1);查询 id=3或者2或者1的数据
$id_str = rtrim($id_str,","); //去掉最后一个逗号
$data = M("order")->where("id in(".$id_str.")")->select();
要先查询出数据,才能使用插件
test.php是导入的案例(下去自己看)
test2.php 是导出的案例
最重要是Classes文件夹里面的 把phpexcel的核心文件Classes里面的文件放在ThinkPhp/library/vendor/Excel里面
//订单的导出 手册查找Vendor 看里面为.php为后缀的方法
//vendor()加载Vendor文件夹下面不是以.class.php为后缀的类文件
Vendor('Excel.PHPExcel');
$objPHPExcel=new \PHPExcel();//实例化excel对象
//设置excel的属性
$objPHPExcel->getProperties()->setCreator('a')
->setLastModifiedBy('b')
->setTitle('标题')
->setSubject('主题')
->setDescription('描述')
->setKeywords('关键字')
->setCategory('c'); //不知道的就用英文字母测试一下
//设置第一行的标题 可以把execl表打开看一下
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1','订单号')
->setCellValue('B1','地址')
->setCellValue('C1','下单时间')
->setCellValue('D1','价格')
->setCellValue('E1','运费')
->setCellValue('F1','状态')
->setCellValue('G1','商品详情');
-----------------
循环往表里面放数据
$i=2;
foreach($data as $k=>$v){
if($v['status']==1){
$status = "未支付";
}elseif($v['status'] == 2){
$status = "未发货";
}else{
$status = '已收获';
}
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$i,$v['order_num'])
->setCellValue('B'.$i,$v['address'])
->setCellValue('C'.$i,date("Y-m-d H:i:s",$v['create_time']))
->setCellValue('D'.$i,$v['price'])
->setCellValue('E'.$i,$v['send_price'])
->setCellValue('F'.$i,$status);
---
->setCellValue('G'.$i,$v['goods']) 刚开始用这个
$i++;
----
/*由于用上面的两句话使导出来的商品详情是json 看不懂 所以 将上面两句话注释掉,用下面的 //[{"id":"1","img":"\/Application\/Admin\/Common\/kindeditor\/attached\/image\/20151008\/20151008150512_86247.jpg","name":"\u7a7a\u5fc3\u83dc","info":"\u7a7a\u5fc3\u83dc\u591a\u7ed9\u70b9\u6cb9\u597d\u5403\u70b9","shop_price":"2.00","goods_id":1,"num":1}]
$goods_array = json_decode($v['goods'],true); 将json转换成数组
foreach($goods_array as $val){
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('G'.$i,"商品名:".$val['name'].";数量:".$val['num']);
$i++;
}
*/
}
--------------------------------
这下面直接复制过来
$objPHPExcel->getActiveSheet()->setTitle('订单表');
$objPHPExcel->setActiveSheetIndex(0);
$filename=urlencode('订单表').'_'.date('Y-m-dHis');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
header('Cache-Control: max-age=0');
//$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 记得加反斜杠
$objWriter->save('php://output');
exit;
}
注意:实例化对象的时候不要复制 要自己写
订单导入: 不在tp框架下面写了,新建www文件,
b.html里面放插件的文件上传
mydome--> file-dialog.html
直接复制,然后修改路径
后面只留一个选择文件按钮
<form action="a.php" method="post">
<input type="text" readonly name="file" class="url" value="" /> <input type="button" class="insertfile" value="选择文件" />
<input type="submit" value="提交">
</form>
新建a.php
将phpexcel插件核心文件放下面
将test.php里面的代码赋值到a.php里面
<?php
header("content-type:text/html;charset=utf-8");
require_once 'PHPExcel/Classes/PHPExcel.php';
require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
require_once 'PHPExcel/Classes/PHPExcel/Reader/Excel5.php';
$objReader=PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
$objPHPExcel=$objReader->load(dirname(__FILE__).$_POST['file']);//$file_url即Excel文件的路径
$sheet=$objPHPExcel->getSheet(0);//获取第一个工作表
$highestRow=$sheet->getHighestRow();//取得总行数
$highestColumn=$sheet->getHighestColumn(); //取得总列数
//循环读取excel文件,读取一条,插入一条
for($j=2;$j<=$highestRow;$j++){//从第一行开始读取数据
$order_num = $objPHPExcel->getActiveSheet()->getCell("A$j")->getValue();
$sql = "insert into a(order_num) values('".$order_num."')";
/* for($k='A';$k<=$highestColumn;$k++){ //从A列读取数据 //这种方法简单,但有不妥,以'\\'合并为数组,再分割\\为字段值插入到数据库,实测在excel中,如果某单元格的值包含了\\导入的数据会为空
echo $objPHPExcel->getActiveSheet()->getCell("$k(行)$j(列)")->getValue();//读取单元格
echo "<br>";
}*/
}
//unlink($file_url); //删除excel文件 unlink()删除文件
?>
dirname(__FILE__) 当前文件的磁盘目录
basename(__FILE__) 当前文件的文件名
进入后台--订单管理
在后台新建 Order控制器
class OrderController extends BackController{
public function index(){
$order = M("order");//你们需要分页
$data = $order->order("create_time desc")->select();
$this->assign("data",$data);
$this->display();
}
}
在视图里面新建Order文件夹 复制其他控制器的视图里面的index过去
<tr>
<th align="center" width="5%"><input type="checkbox"></th>
<th align="center" width="20%">地址</th>
<th align="center" width="20%">商品价格/运费</th>
<th align="center" width="20%">下单时间</th>
<th align="center" width="20%">状态</th>
<th width="15%">管理操作</th>
</tr>
<tbody>
<volist name="data" id="vo">
<tr id="tr{$vo.id}">
<td align="center"><input type="checkbox" value="{$vo.id}"></td>
<td align="center">{$vo.address}</td>
<td align="center">{$vo.price}/{$vo.send_price}</td>
<td align="center">{$vo.create_time|date="Y-m-d H:i:s",###}</font></td>
在模板层把时间戳转化为时间字符串 {$vo.create_time|date="Y-m-d",###}
<td align="center">
<if condition="$vo['status'] eq 0">
<span style="color: red">未支付</span>
<elseif condition="$vo['status'] eq 1" />
<span style="color: blue">未发货</span>
<else />
<span style="color: green">已收获</span>
</if>
</td>
<td align="center">
<a href="{:U('Order/edit',array('id'=>$vo['id']))}" class="J_showdialog">编辑</a>
|<a href="javascript:del({$vo.id})">删除</a></td>
</tr>
</volist>
</tbody>
编辑功能:
在OrderController中新建
public function edit(){
if(IS_POST){
$order = M("order");
$id = I("post.id",0,"int");
if($order->create()){
if($order->where("id=".$id)->save()!==false){
$this->success("保存成功",U("Order/index"));
}else{
$this->error("保存失败",U("Order/index"));
}
}else{
$this->error($order->getError());
}
}else{
$id = I("get.id",0,"int");
$data = M("order")->where("id=".$id)->find();
$this->assign("data",$data);
$this->display();
}
}
在视图里面 新建edit文件
<form action="{:U('Order/edit')}" method="post" id="info_form" onsubmit="return check_form();">
<input type="hidden" name='id' value="{$data.id}">
在视图里面有
订单号 :{$data.order_num}
地址 :
订单只有在未支付的时候才能进行价格的修改
订单只能在未支付或者未发货时才能修改地址
<if condition='$data["status"] lt 2'>
<input type="text" style="width: 600px" name="address" value="{$data.address}">
<else />
{$data.address}
</if>
价格 :<input type="text" name="price" value="{$data.price}">
运费 :<input type="text" name="send_price" value="{$data.send_price}">
还有物流 状态等这些都可以修改,就自己下去做
订单的导出: 在收获的时候,包裹里面有个订到纸条 下单之后(配送员和拍货员是看不到后台) 所以需要把订单导出成excel表
phpexcel插件 php导出或者导入excel的第三方类库
导出选中的: 在index.html里面的复选框
<input type="checkbox" id="all_check" onclick="change_all()"> 导航里面的复选框
(jquery)function change_all(){
if($("#all_check").attr("checked")=="checked"){
//全部需要选中
$("input[type='checkbox']").attr("checked","checked");
}else{
$("input[type='checkbox']").attr("checked",false);
// $("input[type='checkbox']").removeAttr("checked");
}
}
导出需要按钮 将以前的添加按钮 改成 导出选中订单
<a href="javascript:put_out();" class="add fb J_showdialog"><em>导出选中订单</em></a>
function put_out(){
var all = $("tbody input[type='checkbox']:checked");
$("对象:checked")选中的多选框
.length 符合条件的对象的个数
if(all.length!=0){ //判断下面是否有选中订单 如果没有选中的就没有必要执行导出
//进行导出操作
var id_str = '';
all.each(function(k,v){ //$(v).val() 订单的id
id_str += $(v).val()+',';
})
//alert(id_str);
window.location.href='{:U("Order/out_put")}?id_str='+id_str;
}else{
alert("你没有选中任何订单");
}
}
在order控制器里面
public function out_put(){
$id_str = I("get.id_str","","addslashes");
//echo $id_str;
//sql关键字 in
//select * from `表名` where id in(3,2,1);查询 id=3或者2或者1的数据
$id_str = rtrim($id_str,","); //去掉最后一个逗号
$data = M("order")->where("id in(".$id_str.")")->select();
要先查询出数据,才能使用插件
test.php是导入的案例(下去自己看)
test2.php 是导出的案例
最重要是Classes文件夹里面的 把phpexcel的核心文件Classes里面的文件放在ThinkPhp/library/vendor/Excel里面
//订单的导出 手册查找Vendor 看里面为.php为后缀的方法
//vendor()加载Vendor文件夹下面不是以.class.php为后缀的类文件
Vendor('Excel.PHPExcel');
$objPHPExcel=new \PHPExcel();//实例化excel对象
//设置excel的属性
$objPHPExcel->getProperties()->setCreator('a')
->setLastModifiedBy('b')
->setTitle('标题')
->setSubject('主题')
->setDescription('描述')
->setKeywords('关键字')
->setCategory('c'); //不知道的就用英文字母测试一下
//设置第一行的标题 可以把execl表打开看一下
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1','订单号')
->setCellValue('B1','地址')
->setCellValue('C1','下单时间')
->setCellValue('D1','价格')
->setCellValue('E1','运费')
->setCellValue('F1','状态')
->setCellValue('G1','商品详情');
-----------------
循环往表里面放数据
$i=2;
foreach($data as $k=>$v){
if($v['status']==1){
$status = "未支付";
}elseif($v['status'] == 2){
$status = "未发货";
}else{
$status = '已收获';
}
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$i,$v['order_num'])
->setCellValue('B'.$i,$v['address'])
->setCellValue('C'.$i,date("Y-m-d H:i:s",$v['create_time']))
->setCellValue('D'.$i,$v['price'])
->setCellValue('E'.$i,$v['send_price'])
->setCellValue('F'.$i,$status);
---
->setCellValue('G'.$i,$v['goods']) 刚开始用这个
$i++;
----
/*由于用上面的两句话使导出来的商品详情是json 看不懂 所以 将上面两句话注释掉,用下面的 //[{"id":"1","img":"\/Application\/Admin\/Common\/kindeditor\/attached\/image\/20151008\/20151008150512_86247.jpg","name":"\u7a7a\u5fc3\u83dc","info":"\u7a7a\u5fc3\u83dc\u591a\u7ed9\u70b9\u6cb9\u597d\u5403\u70b9","shop_price":"2.00","goods_id":1,"num":1}]
$goods_array = json_decode($v['goods'],true); 将json转换成数组
foreach($goods_array as $val){
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('G'.$i,"商品名:".$val['name'].";数量:".$val['num']);
$i++;
}
*/
}
--------------------------------
这下面直接复制过来
$objPHPExcel->getActiveSheet()->setTitle('订单表');
$objPHPExcel->setActiveSheetIndex(0);
$filename=urlencode('订单表').'_'.date('Y-m-dHis');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
header('Cache-Control: max-age=0');
//$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 记得加反斜杠
$objWriter->save('php://output');
exit;
}
注意:实例化对象的时候不要复制 要自己写
订单导入: 不在tp框架下面写了,新建www文件,
b.html里面放插件的文件上传
mydome--> file-dialog.html
直接复制,然后修改路径
后面只留一个选择文件按钮
<form action="a.php" method="post">
<input type="text" readonly name="file" class="url" value="" /> <input type="button" class="insertfile" value="选择文件" />
<input type="submit" value="提交">
</form>
新建a.php
将phpexcel插件核心文件放下面
将test.php里面的代码赋值到a.php里面
<?php
header("content-type:text/html;charset=utf-8");
require_once 'PHPExcel/Classes/PHPExcel.php';
require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
require_once 'PHPExcel/Classes/PHPExcel/Reader/Excel5.php';
$objReader=PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
$objPHPExcel=$objReader->load(dirname(__FILE__).$_POST['file']);//$file_url即Excel文件的路径
$sheet=$objPHPExcel->getSheet(0);//获取第一个工作表
$highestRow=$sheet->getHighestRow();//取得总行数
$highestColumn=$sheet->getHighestColumn(); //取得总列数
//循环读取excel文件,读取一条,插入一条
for($j=2;$j<=$highestRow;$j++){//从第一行开始读取数据
$order_num = $objPHPExcel->getActiveSheet()->getCell("A$j")->getValue();
$sql = "insert into a(order_num) values('".$order_num."')";
/* for($k='A';$k<=$highestColumn;$k++){ //从A列读取数据 //这种方法简单,但有不妥,以'\\'合并为数组,再分割\\为字段值插入到数据库,实测在excel中,如果某单元格的值包含了\\导入的数据会为空
echo $objPHPExcel->getActiveSheet()->getCell("$k(行)$j(列)")->getValue();//读取单元格
echo "<br>";
}*/
}
//unlink($file_url); //删除excel文件 unlink()删除文件
?>
dirname(__FILE__) 当前文件的磁盘目录
basename(__FILE__) 当前文件的文件名