当下很多功能都觉得理所当然,但是实际作为2012年停更的ECSHOP来说,很多功能其实都是缺少的,好比今天的要说的功能 订单导出 这个功能对于现在的产品设计来说,应该属于一个比较常规的功能,但是ECSHOP中并不是。根本没有这个功能,所以需要我们来进行开发。接下来就给大家讲解下如何给ECSHOP订单加入导出功能。

当然你也可能是找模块来了,先来看看导出的效果。是不是你需要的,接近那你就继续这个例子修改吧。

做之前提供2个下载包。依照你需要下载:

EXCEL支持类

如果你需要学习怎么做,下载这个。放到admin下面

ECSHOP默认版本修改

如果你是默认版本后台要直接用,那么除了上面的文件覆盖,同时下载这个覆盖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 数据文件的更多相关文章

  1. 定制Dynamics CRM标准导出功能:不能导出指定列的值

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复239或者20161203可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  2. Asp.Net MVC 使用FileResult导出Excel数据文件

    MVC实现Excel导出功能,今天来记录一下. 采取了最简单的方法.(转载)   用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件. 第一种:使用FileCo ...

  3. flex+java将数据库里的数据导出到指定目录下excel表里(poi)

    数据写入到excel中采用的是Apache POI: //java后台的一个工具类(该工具类适用于为不同字段添加,方便) /* 下面这个方法是将list转换为Excel工作表的 */ public s ...

  4. Asp.Net 导出Excel数据文件

    表格例子如下: <table id="tableExcel" width="100%" border="1" cellspacing= ...

  5. 使用FileResult导出Excel数据文件

    用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件. 第一种:使用FileContentResult // 通过使用文件内容,内容类型,文件名称创建一个File ...

  6. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  7. NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。

    App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...

  8. Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel

    Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel 在博文"在Asp.Net Core 使用 Sqlite 数据库"中创建了ASP.NET Co ...

  9. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 网络订单提醒功能,网点区域功能增强

    客户端会提醒是否有网络订单来了,这样及时处理网络上的用户下单,当然也会有手机短信系统,全国几千个网点就可以协同作战了,竟然有序的处理海量用户的下单.网络订单提醒功能增强效果如下: 系统每5分钟会检查一 ...

随机推荐

  1. if语句,if...else if语句和switch...case语句的区别和分析

    前段时间在工作中遇到了一个关于条件判断语句的问题,在if语句,if else if语句和switch case语句这三者之间分析,使用其中最有效率的一种方法. 所以就将这个问题作为自己第一篇博客的主要 ...

  2. JVM性能调优-GC内存模型及垃圾收集算法

    JVM内存管理模型: http://developer.51cto.com/art/201002/184385.htm 一 JVM内存模型 1.1 Java栈 Java栈是与每一个线程关联的,JVM在 ...

  3. poj 1192最优连通子集(简单树形dp)

    题目链接:http://poj.org/problem?id=1192 #include<cstdio> #include<cstring> #include<iostr ...

  4. Bridges painting - SGU 121(构造)

    题目大意:有个一无向图,给所有的边染色,如果一个点连接的边超过两个,那么最少要染一个白色和一个黑色,能否给整个图染色?不能输出“No solution”. 分析:引用连接 http://edward- ...

  5. 与IO相关的等待事件troubleshooting-系列5

    'db file scattered read'         这是另一种常见的等待事件.他产生于Oracle从磁盘读取多个块到Buffer Cache中非连续(" scattered&q ...

  6. Leo 搭积木

    Leo 搭积木[问题描述]Leo是一个快乐的火星人,总是能和地球上的 OIers玩得很 high.2012 到了, Leo 又被召回火星了,在火星上没人陪他玩了,但是他有好多好多积木,于是他开始搭积木 ...

  7. Python爬取CSDN博客文章

    0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...

  8. 使用FileSystemWatcher监视文件变化

    本文转载:http://www.cnblogs.com/zanxiaofeng/archive/2011/01/08/1930583.html FileSystemWatcher基础 属性: Path ...

  9. DSPack各种使用方法

    1. DSPack 2.3.4 安装   一. 下载由于sourceforge最近不能访问,所以可以去 http://www.progdigy.com/ 下载.下载 http://www.progdi ...

  10. java不求有功,但求无过—异常处理

    在程序开发中,错误往往有两种.一种是编译时出现的错误,该种错误比較easy发现.还有一种是执行时出现的错误,该种错误是开发者比較头疼的.异常就是一个执行时的错误,比如,除数为0 ,数组越界等. 异常处 ...