TP -- 订单的导出,phpexcel 类应用

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过去

 
地址
商品价格/运费
下单时间
状态
管理操作





{$vo.address}
{$vo.price}/{$vo.send_price}
{$vo.create_time|date="Y-m-d H:i:s",###}
在模板层把时间戳转化为时间字符串  {$vo.create_time|date="Y-m-d",###}


未支付

未发货

已收获



编辑
|删除



编辑功能:
在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文件

 
在视图里面有
订单号 :{$data.order_num}
地址 :
订单只有在未支付的时候才能进行价格的修改
订单只能在未支付或者未发货时才能修改地址
 


   {$data.address}

价格 :
运费 :
还有物流 状态等这些都可以修改,就自己下去做


订单的导出: 在收获的时候,包裹里面有个订到纸条  下单之后(配送员和拍货员是看不到后台)  所以需要把订单导出成excel表
phpexcel插件 php导出或者导入excel的第三方类库
导出选中的: 在index.html里面的复选框
 导航里面的复选框
(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");
    }
}


导出需要按钮   将以前的添加按钮 改成 导出选中订单
导出选中订单
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
直接复制,然后修改路径
后面只留一个选择文件按钮

   
   

新建a.php
将phpexcel插件核心文件放下面
将test.php里面的代码赋值到a.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 "
";
    }*/
}
//unlink($file_url); //删除excel文件 unlink()删除文件
?>
dirname(__FILE__) 当前文件的磁盘目录
basename(__FILE__) 当前文件的文件名

你可能感兴趣的:(开发应用,php,函数,管理,thinkphp,phpexcel)