[转载]ecshop 实现订单导出功能 指定订单导出 EXCEL 数据文件
当下很多功能都觉得理所当然,但是实际作为2012年停更的ECSHOP来说,很多功能其实都是缺少的,好比今天的要说的功能 订单导出 这个功能对于现在的产品设计来说,应该属于一个比较常规的功能,但是ECSHOP中并不是。根本没有这个功能,所以需要我们来进行开发。接下来就给大家讲解下如何给ECSHOP订单加入导出功能。
当然你也可能是找模块来了,先来看看导出的效果。是不是你需要的,接近那你就继续这个例子修改吧。
做之前提供2个下载包。依照你需要下载:
如果你需要学习怎么做,下载这个。放到admin下面
如果你是默认版本后台要直接用,那么除了上面的文件覆盖,同时下载这个覆盖admin
本人建议,因为版本问题还是选择第一个方式,从头做吧。避免覆盖问题变多。那么接下来我们来看怎么修改。
1,admin\templates\order_list.htm 加入“导出订单”按钮,找到下面代码:
<input name="confirm" type="submit" id="btnSubmit" value="{$lang.op_confirm}" class="button" disabled="true" onclick="this.form.target = '_self'" />
<input name="invalid" type="submit" id="btnSubmit1" value="{$lang.op_invalid}" class="button" disabled="true" onclick="this.form.target = '_self'" />
<input name="cancel" type="submit" id="btnSubmit2" value="{$lang.op_cancel}" class="button" disabled="true" onclick="this.form.target = '_self'" />
<input name="remove" type="submit" id="btnSubmit3" value="{$lang.remove}" class="button" disabled="true" onclick="this.form.target = '_self'" />
<input name="print" type="submit" id="btnSubmit4" value="{$lang.print_order}" class="button" disabled="true" onclick="this.form.target = '_blank'" />
加入下面代码
<!-- 导出订单功能开始 -->
<input name="export" type="submit" id="btnSubmit5" value="导出订单" class="button" disabled="true" onclick="this.form.target = '_blank'" />
<!-- 导出订单功能结束 -->
2,admin\order.php 里面加入PHPExcel 实现导出功能,找到下面代码:
/* 去发货 */
elseif (isset($_POST['to_delivery']))
{
$url = 'order.php?act=delivery_list&order_sn='.$_REQUEST['order_sn'];
ecs_header("Location: $url\n");
exit;
}
在它的下面加入
/* 导出订单功能开始 */
elseif (isset($_POST['export']))
{
if (empty($_POST['order_id']))
{
sys_msg($_LANG['pls_select_order']);
}
/* 赋值公用信息 */
$smarty->assign('shop_name', $_CFG['shop_name']);
$smarty->assign('shop_url', $ecs->url());
$smarty->assign('shop_address', $_CFG['shop_address']);
$smarty->assign('service_phone',$_CFG['service_phone']);
$smarty->assign('print_time', local_date($_CFG['time_format']));
$smarty->assign('action_user', $_SESSION['admin_name']);
$html = '';
$order_sn_list = explode(',', $_POST['order_id']);
require_once dirname(__FILE__) . '/Classes/PHPExcel.php';
require_once dirname(__FILE__) . '/Classes/PHPExcel/IOFactory.php';
$PHPExcel = new PHPExcel();
//设置excel属性基本信息
$PHPExcel->getProperties()->setCreator("Neo")
->setLastModifiedBy("Neo")
->setTitle("东莞XX系统有限公司")
->setSubject("订单列表")
->setDescription("")
->setKeywords("订单列表")
->setCategory("");
$PHPExcel->setActiveSheetIndex(0);
$PHPExcel->getActiveSheet()->setTitle("订单列表");
//填入表头主标题
$PHPExcel->getActiveSheet()->setCellValue('A1', $_CFG['shop_name'].'订单列表');
//填入表头副标题
$PHPExcel->getActiveSheet()->setCellValue('A2', '操作者:'.$_SESSION['admin_name'].' 导出日期:'.date('Y-m-d',time()).' 地址:'.$_CFG['shop_address'].' 电话:'.$_CFG['service_phone']);
//合并表头单元格
$PHPExcel->getActiveSheet()->mergeCells('A1:T1');
$PHPExcel->getActiveSheet()->mergeCells('A2:T2');
//设置表头行高
$PHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(40);
$PHPExcel->getActiveSheet()->getRowDimension(2)->setRowHeight(20);
$PHPExcel->getActiveSheet()->getRowDimension(3)->setRowHeight(30);
//设置表头字体
$PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setName('黑体');
$PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);
$PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
$PHPExcel->getActiveSheet()->getStyle('A2')->getFont()->setName('宋体');
$PHPExcel->getActiveSheet()->getStyle('A2')->getFont()->setSize(14);
$PHPExcel->getActiveSheet()->getStyle('A3:T3')->getFont()->setBold(true);
//设置单元格边框
$styleArray = array(
'borders' => array(
'allborders' => array(
//'style' => PHPExcel_Style_Border::BORDER_THICK,//边框是粗的
'style' => PHPExcel_Style_Border::BORDER_THIN,//细边框
//'color' => array('argb' => 'FFFF0000'),
),
),
);
//表格宽度
$PHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(18);//订单编号
$PHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);//下单时间
$PHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);//付款时间
$PHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);//发货时间
$PHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(18);//发货单号
$PHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20);//支付方式
$PHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(10);//配送方式
$PHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(10);//配送费用
$PHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(10);//收件人
$PHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(35);//收货地址
$PHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(15);//电话
$PHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(15);//手机
$PHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(25);//邮箱
$PHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(15);//货号
$PHPExcel->getActiveSheet()->getColumnDimension('O')->setWidth(15);//商品名称
$PHPExcel->getActiveSheet()->getColumnDimension('P')->setWidth(15);//属性
$PHPExcel->getActiveSheet()->getColumnDimension('Q')->setWidth(10);//价格
$PHPExcel->getActiveSheet()->getColumnDimension('R')->setWidth(6);//数量
$PHPExcel->getActiveSheet()->getColumnDimension('S')->setWidth(15);//小计
$PHPExcel->getActiveSheet()->getColumnDimension('T')->setWidth(15);//应付款金额
//表格标题
$PHPExcel->getActiveSheet()->setCellValue('A3', '订单编号');
$PHPExcel->getActiveSheet()->setCellValue('B3', '下单时间');
$PHPExcel->getActiveSheet()->setCellValue('C3', '付款时间');
$PHPExcel->getActiveSheet()->setCellValue('D3', '发货时间');
$PHPExcel->getActiveSheet()->setCellValue('E3', '发货单号');
$PHPExcel->getActiveSheet()->setCellValue('F3', '支付方式');
$PHPExcel->getActiveSheet()->setCellValue('G3', '配送方式');
$PHPExcel->getActiveSheet()->setCellValue('H3', '配送费用');
$PHPExcel->getActiveSheet()->setCellValue('I3', '收件人');
$PHPExcel->getActiveSheet()->setCellValue('J3', '收货地址');
$PHPExcel->getActiveSheet()->setCellValue('K3', '电话');
$PHPExcel->getActiveSheet()->setCellValue('L3', '手机');
$PHPExcel->getActiveSheet()->setCellValue('M3', '邮箱');
$PHPExcel->getActiveSheet()->setCellValue('N3', '货号');
$PHPExcel->getActiveSheet()->setCellValue('O3', '商品名称');
$PHPExcel->getActiveSheet()->setCellValue('P3', '属性');
$PHPExcel->getActiveSheet()->setCellValue('Q3', '价格');
$PHPExcel->getActiveSheet()->setCellValue('R3', '数量');
$PHPExcel->getActiveSheet()->setCellValue('S3', '小计');
$PHPExcel->getActiveSheet()->setCellValue('T3', '商品总金额');
$hang = 4;
foreach ($order_sn_list as $order_sn) {
/* 取得订单信息 */
$order = order_info(0, $order_sn);
if (empty($order)) {
continue;
}
/* 根据订单是否完成检查权限 */
if (order_finished($order)) {
if (!admin_priv('order_view_finished', '', false)) {
continue;
}
} else {
if (!admin_priv('order_view', '', false)) {
continue;
}
}
/* 如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
$sql = "SELECT agency_id FROM " . $ecs->table('admin_user') . " WHERE user_id = '$_SESSION[admin_id]'";
$agency_id = $db->getOne($sql);
if ($agency_id > 0) {
if ($order['agency_id'] != $agency_id) {
continue;
}
}
/* 取得用户名 */
if ($order['user_id'] > 0) {
$user = user_info($order['user_id']);
if (!empty($user)) {
$order['user_name'] = $user['user_name'];
}
}
/* 取得区域名 */
$sql = "SELECT concat(IFNULL(c.region_name, ''), ' ', IFNULL(p.region_name, ''), " . "' ', IFNULL(t.region_name, ''), ' ', IFNULL(d.region_name, '')) AS region " . "FROM " . $ecs->table('order_info') . " AS o " . "LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " . "WHERE o.order_id = '$order[order_id]'";
$order['region'] = $db->getOne($sql);
/* 其他处理 */
$order['order_time'] = local_date($_CFG['time_format'], $order['add_time']);
$order['pay_time'] = $order['pay_time'] > 0 ? local_date($_CFG['time_format'], $order['pay_time']) : $_LANG['ps'][PS_UNPAYED];
$order['shipping_time'] = $order['shipping_time'] > 0 ? local_date($_CFG['time_format'], $order['shipping_time']) : $_LANG['ss'][SS_UNSHIPPED];
$order['status'] = $_LANG['os'][$order['order_status']] . ',' . $_LANG['ps'][$order['pay_status']] . ',' . $_LANG['ss'][$order['shipping_status']];
$order['invoice_no'] = $order['shipping_status'] == SS_UNSHIPPED || $order['shipping_status'] == SS_PREPARING ? $_LANG['ss'][SS_UNSHIPPED] : $order['invoice_no'];
/* 此订单的发货备注(此订单的最后一条操作记录) */
$sql = "SELECT action_note FROM " . $ecs->table('order_action') . " WHERE order_id = '$order[order_id]' AND shipping_status = 1 ORDER BY log_time DESC";
$order['invoice_note'] = $db->getOne($sql);
$shuliang = 0;
/* 取得订单商品 */
$sql = "SELECT o.*, g.goods_number AS storage, o.goods_attr, IFNULL(b.brand_name, '') AS brand_name " . "FROM " . $ecs->table('order_goods') . " AS o " . "LEFT JOIN " . $ecs->table('goods') . " AS g ON o.goods_id = g.goods_id " . "LEFT JOIN " . $ecs->table('brand') . " AS b ON g.brand_id = b.brand_id " . "WHERE o.order_id = '$order[order_id]' ";
$res = $db->query($sql);
$shuliang = 0;
$chanpin = $hang;
while ($row = $db->fetchRow($res)) {
$shuliang = $shuliang + 1;
/* 虚拟商品支持 */
if ($row['is_real'] == 0) {
/* 取得语言项 */
$filename = ROOT_PATH . 'plugins/' . $row['extension_code'] . '/languages/common_' . $_CFG['lang'] . '.php';
if (file_exists($filename)) {
include_once($filename);
if (!empty($_LANG[$row['extension_code'] . '_link'])) {
$row['goods_name'] = $row['goods_name'] . sprintf($_LANG[$row['extension_code'] . '_link'], $row['goods_id'], $order['order_sn']);
}
}
}
$row['formated_subtotal'] = price_format($row['goods_price'] * $row['goods_number']);
$row['formated_goods_price'] = price_format($row['goods_price']);
//var_dump($order);die;
//输出订单的商品,由于可能一个人购买多个商品,所以在这先输出了
$PHPExcel->getActiveSheet()->setCellValue('N' . $chanpin, $row['goods_sn']);
$PHPExcel->getActiveSheet()->setCellValue('O' . $chanpin, $row['goods_name']);
$PHPExcel->getActiveSheet()->setCellValue('P' . $chanpin, $row['goods_attr']);
$PHPExcel->getActiveSheet()->setCellValue('Q' . $chanpin, $row['goods_price']);
$PHPExcel->getActiveSheet()->setCellValue('R' . $chanpin, $row['goods_number']);
$PHPExcel->getActiveSheet()->setCellValue('S' . $chanpin, $row['formated_subtotal']);
$chanpin = $chanpin + 1;
}
for ($kk = $hang; $kk < ($hang + $shuliang); $kk++) {
//合并单元格
$PHPExcel->getActiveSheet()->mergeCells('A' . $hang . ':A' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('B' . $hang . ':B' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('C' . $hang . ':C' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('D' . $hang . ':D' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('E' . $hang . ':E' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('F' . $hang . ':F' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('G' . $hang . ':G' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('H' . $hang . ':H' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('I' . $hang . ':I' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('J' . $hang . ':J' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('K' . $hang . ':K' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('L' . $hang . ':L' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('M' . $hang . ':M' . $kk);
$PHPExcel->getActiveSheet()->mergeCells('T' . $hang . ':T' . $kk);
}
$PHPExcel->getActiveSheet()->setCellValue('A' . ($hang), $order['order_sn']." ");//加个空格,防止时间戳被转换
$PHPExcel->getActiveSheet()->setCellValue('B' . ($hang), $order['order_time']);
$PHPExcel->getActiveSheet()->setCellValue('C' . ($hang), $order['pay_time']);
$PHPExcel->getActiveSheet()->setCellValue('D' . ($hang), $order['shipping_time']);
$PHPExcel->getActiveSheet()->setCellValue('E' . ($hang), $order['invoice_no']." ");
$PHPExcel->getActiveSheet()->setCellValue('F' . ($hang), $order['pay_name']);
$PHPExcel->getActiveSheet()->setCellValue('G' . ($hang), $order['shipping_name']);
$PHPExcel->getActiveSheet()->setCellValue('H' . ($hang), $order['shipping_fee'].'元');
$PHPExcel->getActiveSheet()->setCellValue('I' . ($hang), $order['consignee']);
$PHPExcel->getActiveSheet()->setCellValue('J' . ($hang), str_replace(" ","",$order['region']).$order['address']);
$PHPExcel->getActiveSheet()->setCellValue('K' . ($hang), $order['tel']);
$PHPExcel->getActiveSheet()->setCellValue('L' . ($hang), $order['mobile']);
$PHPExcel->getActiveSheet()->setCellValue('M' . ($hang), $order['email']);
$PHPExcel->getActiveSheet()->setCellValue('T' . ($hang), $order['formated_goods_amount']);
$hang = $hang + $shuliang;
}
//设置单元格边框
$PHPExcel->getActiveSheet()->getStyle('A1:T'.$hang)->applyFromArray($styleArray);
//设置自动换行
$PHPExcel->getActiveSheet()->getStyle('A4:T'.$hang)->getAlignment()->setWrapText(true);
//设置字体大小
$PHPExcel->getActiveSheet()->getStyle('A4:T'.$hang)->getFont()->setSize(12);
//垂直居中
$PHPExcel->getActiveSheet()->getStyle('A1:T'.$hang)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//水平居中
$PHPExcel->getActiveSheet()->getStyle('A1:T'.$hang)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$Writer = PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel5');
$Writer->save(str_replace('.php', '.xls', __FILE__));
$url = "order.xls";
ecs_header("Location: $url\n");
exit;
}
/* 导出订单功能结束 */
到这里就能看到效果了,更新下缓存,在订单列表页部分,下面的批量操作就能找到对应的按钮操作咯。是不是很方便。啥。。你说要勾选,不够全。。。。其实EC支持修改翻页数量的,这个就解决啦。
要创建多个sheet 用下面的创建:
$PHPExce->createSheet();
$PHPExcel->setActiveSheetIndex(1);
转载 http://www.phptext.net/article_view.php?id=746
[转载]ecshop 实现订单导出功能 指定订单导出 EXCEL 数据文件的更多相关文章
- 定制Dynamics CRM标准导出功能:不能导出指定列的值
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复239或者20161203可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- Asp.Net MVC 使用FileResult导出Excel数据文件
MVC实现Excel导出功能,今天来记录一下. 采取了最简单的方法.(转载) 用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件. 第一种:使用FileCo ...
- flex+java将数据库里的数据导出到指定目录下excel表里(poi)
数据写入到excel中采用的是Apache POI: //java后台的一个工具类(该工具类适用于为不同字段添加,方便) /* 下面这个方法是将list转换为Excel工作表的 */ public s ...
- Asp.Net 导出Excel数据文件
表格例子如下: <table id="tableExcel" width="100%" border="1" cellspacing= ...
- 使用FileResult导出Excel数据文件
用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件. 第一种:使用FileContentResult // 通过使用文件内容,内容类型,文件名称创建一个File ...
- 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...
- NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。
App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...
- Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel
Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel 在博文"在Asp.Net Core 使用 Sqlite 数据库"中创建了ASP.NET Co ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 网络订单提醒功能,网点区域功能增强
客户端会提醒是否有网络订单来了,这样及时处理网络上的用户下单,当然也会有手机短信系统,全国几千个网点就可以协同作战了,竟然有序的处理海量用户的下单.网络订单提醒功能增强效果如下: 系统每5分钟会检查一 ...
随机推荐
- if语句,if...else if语句和switch...case语句的区别和分析
前段时间在工作中遇到了一个关于条件判断语句的问题,在if语句,if else if语句和switch case语句这三者之间分析,使用其中最有效率的一种方法. 所以就将这个问题作为自己第一篇博客的主要 ...
- JVM性能调优-GC内存模型及垃圾收集算法
JVM内存管理模型: http://developer.51cto.com/art/201002/184385.htm 一 JVM内存模型 1.1 Java栈 Java栈是与每一个线程关联的,JVM在 ...
- poj 1192最优连通子集(简单树形dp)
题目链接:http://poj.org/problem?id=1192 #include<cstdio> #include<cstring> #include<iostr ...
- Bridges painting - SGU 121(构造)
题目大意:有个一无向图,给所有的边染色,如果一个点连接的边超过两个,那么最少要染一个白色和一个黑色,能否给整个图染色?不能输出“No solution”. 分析:引用连接 http://edward- ...
- 与IO相关的等待事件troubleshooting-系列5
'db file scattered read' 这是另一种常见的等待事件.他产生于Oracle从磁盘读取多个块到Buffer Cache中非连续(" scattered&q ...
- Leo 搭积木
Leo 搭积木[问题描述]Leo是一个快乐的火星人,总是能和地球上的 OIers玩得很 high.2012 到了, Leo 又被召回火星了,在火星上没人陪他玩了,但是他有好多好多积木,于是他开始搭积木 ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- 使用FileSystemWatcher监视文件变化
本文转载:http://www.cnblogs.com/zanxiaofeng/archive/2011/01/08/1930583.html FileSystemWatcher基础 属性: Path ...
- DSPack各种使用方法
1. DSPack 2.3.4 安装 一. 下载由于sourceforge最近不能访问,所以可以去 http://www.progdigy.com/ 下载.下载 http://www.progdi ...
- java不求有功,但求无过—异常处理
在程序开发中,错误往往有两种.一种是编译时出现的错误,该种错误比較easy发现.还有一种是执行时出现的错误,该种错误是开发者比較头疼的.异常就是一个执行时的错误,比如,除数为0 ,数组越界等. 异常处 ...