Yii: 扩展CGridView增加导出CSV功能

Yii提供的CGridView组件没有内置数据导出功能,不过我们可以通过扩展该组件来添加该功能。

具体方法如下:

1、首先派生一个子类,添加一个action成员,在该视图的init函数中判断是浏览动作还是数据导出动作,如果是浏览动作者则保持默认行为,否则输出csv文件。

[php] view plaincopy

  1. public function init()
  2. {
  3. if($this->action == ‘export‘)
  4. {
  5. parent::init();
  6. $this->genCsv();
  7. }
  8. else
  9. {
  10. parent::init();
  11. }
  12. }

2、处理csv文件的输出:

[php] view plaincopy

  1. protected function genCsv()
  2. {
  3. header("Content-Type: text/csv; charset=GB2312");
  4. header(‘Content-Disposition: attachment; filename="‘.$this->fileName.‘"‘);
  5. //add your content dump codes here
  6. flush();
  7. }

3、然后在表格控件界面上添加一个csv导出按钮

覆盖其renderItems()方法如下:

[php] view plaincopy

  1. public function renderItems()
  2. {
  3. if(Yii::app()->user->checkAccess(‘administrator‘))
  4. {
  5. echo ‘<div class="toolBar">‘;
  6. echo ‘<form action="‘.CHtml::normalizeUrl(array($this->action)).‘&id=‘.$this->id.‘" method="post">‘;
  7. foreach($this->getController()->getActionParams() as $name => $value)
  8. {
  9. echo ‘<input type="hidden" name="‘.addcslashes($name,‘"‘).‘" value="‘.addcslashes($value,‘"‘).‘" />‘;
  10. }
  11. echo ‘<input type="image" title="‘.Yii::t(‘ifCMS‘,‘Export to CSV‘).‘" src="‘.Yii::app()->theme->BaseUrl.‘/images/ico-csv.png" alt="Submit">‘;
  12. echo ‘</form>‘;
  13. echo ‘</div>‘;
  14. }
  15. parent::renderItems();
  16. }

4、然后在点击CSV的动作处理比如actionCsv()中render单个表格视图,模板如下

[php] view plaincopy

  1. <?php
  2. $this->widget(‘application.extensions.grid.MyGridView‘, array(
  3. ‘id‘=>‘grid‘,
  4. ‘action‘=>‘export‘,
  5. ‘dataProvider‘=>$dp,
  6. ‘columns‘=>array(
  7. array(
  8. ‘header‘=>Yii::t(‘Statistics‘,‘Phone‘),
  9. ‘name‘=>‘phone‘,
  10. ),
  11. array(
  12. ‘header‘=>Yii::t(‘Statistics‘,‘Count‘),
  13. ‘name‘=>‘count‘,
  14. ),
  15. )
  16. ));?>

注意上述第2步csv输出函数中的header设置语句之前不要有任何的输出,包括如下函数:

[plain] view plaincopy

  1. print, echo, printf, trigger_error, vprintf, ob_flush, var_dump, readfile, passthru

否则内容只会在浏览器中输出,但不会出现文件下载。

by iefreer

参考:

http://stackoverflow.com/questions/8028957/headers-already-sent-by-php

时间: 2024-11-14 12:46:32

Yii: 扩展CGridView增加导出CSV功能的相关文章

MyReport增加导出PDF功能

生成PDF的第三方库AlivePDF AlivePDF 0.1.5RC(For FB) MyReportto PDF的代码示例 //外部方式向ReportViewer.Instance添加自定义PDF导出按钮 privatefunctionInitCustomButtons():void { varexportPDF:ToolButton = newToolButton(); exportPDF.width = 23; exportPDF.setStyle("icon",Asset.I

PL/SQL Developer 导出csv文件,用excel打开中文显示乱码

今天打算用PL/SQL Developer的导出csv功能把sql语句的查询结果导出到一个csv文件.这个sql查询的结果里面有中文,最后用execel打开的时候发现中文全部是乱码. 百度之后得到答案.下面的方法在excel2007下面验证成功 方法 1 导出csv格式文件 新建excel文件 比如 a.xls excel软件打开 选择菜单数据 -导入外部数据  unicode默认下一步 选择 逗号分隔符 点击确定导入完成 方法 2 导出成html格式  使用ie打开 在ie上点击右键 导出到

扩展GridView导出Excel功能

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.CompilerServices;using System.Text;using System.Web;using System.Web.Compilation;using System.Web.UI;using System.Web.UI.WebControls; namespace Web{ 

从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展增加检查订单功能,以便记录并检测输入的参数

这一章节我们讨论一下扩展增加检查订单功能,以便记录并检测输入的参数. 1.domain 蛋糕类: package com.raylee.my_new_spring.my_new_spring.ch03.topic_1_8; public class Cake { private String name = ""; public String getName() { return name; } public void setName(String name) { this.name =

大视电子MVD204多屏扩展仪增加4K输入/180度旋转拼接功能

大视电子MVD204多屏扩展仪增加4K输入/180度旋转拼接功能 目前上海大视电子科技有限公司(上海股权交易中心挂牌,企业名称:大视科技:股票代码:201276)MVD20X多屏扩展仪, 已经销售到海内外50多个国家和地区.大视电子根据客户的需求,增加180度旋转功能,虽然目前超窄边的液晶价格已经下滑很多,但是相对传统的液晶电视价 格还是高出不少,往往在酒吧,展馆展示,舞台搭建等成本比较敏感的场合.整个系统的成本会非常关键.但是传统的显示器或者液晶电视机四边不是平整的,往往 是下边有凸起,上边比

mysql导出csv

原网页 http://www.web-jia.com/view.php?a=12 今天有的需求要一些数据,现在这套系统用了mysql数据库了,没有sqlserver导出数据那么简单了 要数据想到最简单的当然是导出csv了 查了一下有outfile 可以用稍微设置一下就可以了还是挺不错的 select * from player into outfile 'd:/out.csv' fields terminated by ',' optionally enclosed by '' lines te

PHP 和 JS 导入导出csv表格(上)

CSV简介 在开发后台管理系统的时候,几乎无可避免的会遇到需要导入导出Excel表格的需求.csv也是表格的一种,其中文名为"逗号分隔符文件".在Excel中打开如下图左边所示,在记事本打开如下图右边所示: 再看包含特殊字符的表格 与xls或xlsx 表格相类似,CSV文件也是用来表示二维表格.而不同的是: 1.CSV是一种纯文本文件,任何编辑器都能打开并读取它:xls(x)是专用的二进制文件,要用表格软件才能正常打开,否则乱码: 2.CSV的体积很小,比如上面的表格内容,csv只有几

Spire.Office for .NET 提供制图,制表,电子邮件,条形码以及数据导出的功能

Spire.Office for .NET是e-iceblue公司推出的一款.NET控件包.它包含所有该公司发布的.NET的控件.通过Spire.Office for .NET,开发人员可以轻松的操作商业中最流行格式的文件,主要包括Word, Excel, PDF,XML和HTML.除了强大的文件操作组件,Spire.Office for .NET 还提供制图,制表,电子邮件,条形码以及数据导出的功能. Spire.Office for .NET 包含以下产品: Spire.Doc for .N

mysqldump 导出CSV文件

mysqldump -h 127.0.0.1 -u root -p database table -t -T /home/mysql/ --fields-enclosed-by=\" --fields-terminated-by=, -w 增加条件判断语句 老外的一个处理mysql异常的错误,明天整理一下 http://icesquare.com/wordpress/mysql-starting-mysql-error-the-server-quit-without-updating-pid-f