Yii框架扩展CGridView增加导出CSV功能的方法

本文实例讲述了Yii框架扩展CGridView增加导出CSV功能的方法。分享给大家供大家参考,具体如下:

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

具体方法如下:

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

public function init() { if($this->action == 'export') { parent::init(); $this->genCsv(); } else { parent::init(); } }

2、处理csv文件的输出:

protected function genCsv() { header("Content-Type: text/csv; charset=GB2312"); header('Content-Disposition: attachment; filename="'.$this->fileName.'"'); //add your content dump codes here flush(); }

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

覆盖其renderItems()方法如下:

public function renderItems() { if(Yii::app()->user->checkAccess('administrator')) { echo '<div class="toolBar">'; echo '<form action="'.CHtml::normalizeUrl(array($this->action)).'&id='.$this->id.'" method="post">'; foreach($this->getController()->getActionParams() as $name => $value) { echo '<input type="hidden" name="'.addcslashes($name,'"').'" value="'.addcslashes($value,'"').'" />'; } echo '<input type="image" title="'.Yii::t('ifCMS','Export to CSV').'" src="'.Yii::app()->theme->BaseUrl.'/images/ico-csv.png" alt="Submit">'; echo '</form>'; echo '</div>'; } parent::renderItems(); }

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

<?php $this->widget('application.extensions.grid.MyGridView', array( 'id'=>'grid', 'action'=>'export', 'dataProvider'=>$dp, 'columns'=>array( array( 'header'=>Yii::t('Statistics','Phone'), 'name'=>'phone', ), array( 'header'=>Yii::t('Statistics','Count'), 'name'=>'count', ), ) ));?>

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

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

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

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

时间: 2024-10-26 00:19:44

Yii框架扩展CGridView增加导出CSV功能的方法的相关文章

应用Java泛型和反射导出CSV文件的方法_java

本文实例讲述了应用Java泛型和反射导出CSV文件的方法.分享给大家供大家参考.具体如下: 项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能. 复制代码 代码如下: public <T> void saveFile(List<T> list, String outFile) throws IOException {         if (list == null || list.isEmpty())

Yii框架实现多数据库配置和操作的方法

本文实例讲述了Yii框架实现多数据库配置和操作的方法.分享给大家供大家参考,具体如下: Yii的默认配置为一个数据库,不过可以很容易的支持多个数据库的操作, 这为按业务分割数据库提供了基础设施.如下所示: //cms DB connection 'db' => (defined('DB_CONNECTION') ? array( 'connectionString' => DB_CONNECTION, 'username' => DB_USER, 'password' => DB_

详解PHP的Yii框架的运行机制及其路由功能_php技巧

运行机制概述每一次 Yii 应用开始处理 HTTP 请求时,它都会进行一个近似的流程. 用户提交指向 入口脚本 web/index.php 的请求. 入口脚本会加载 配置数组 并创建一个 应用 实例用于处理该请求. 应用会通过 request(请求) 应用组件解析被请求的 路由. 应用创建一个 controller(控制器) 实例具体处理请求. 控制器会创建一个 action(动作) 实例并为该动作执行相关的 Filters(访问过滤器). 如果任何一个过滤器验证失败,该动作会被取消. 如果全部

扩展gridview的导出excel功能乱码问题的解决

在以前的手把手教你如何扩展GridView之自带Excel和Word导出的实现,会出现不规律的乱码现象,查阅了很多资料,比如有人说将编码改为UTF-7,结果在excel2007中,utf-7编码的更是乱的不成样子?导出乱码的代码检查了无数遍,编码更给为utf-8,gb2312,utf-7都试过了,而且通过httpwatch检查到同样输出到客户端的内容,产生的excel却一个乱码,一个不乱,大白天见了鬼了,后来经过反复尝试,发现在代码中添加下面一段,就再也没出现过乱码的情况,大概用了有1个多月了吧

简单的MySQL中导出CSV的各种方法

 代码如下 复制代码 select * from test_info   into outfile '/tmp/test.csv'   fields terminated by ',' optionally enclosed by '"' escaped by '"'   lines terminated by 'rn'; MySQL中导入CSV格式数据:  代码如下 复制代码 load data infile '/tmp/test.csv'   into table test_inf

Win8系统增加滑动关机功能的方法

新推出的Windows8.1系统以快速的开机速度受到了用户的喜欢,但Windows8.1的关机操作并没有达到这样的效果,繁琐的关机操作让用户很是烦恼,如何才能达到快速的挂机呢?下面小编要向大家介绍一种滑动关机操作. Windows8.1如何设置滑动关机: 1.进入"运行"(WinKey+R); 2.输入"slidetoshutdown.exe"; 3.点击"OK"; 4.出现关机界面,向下拖动,即可关闭Win8.1系统. 5.如果不想每次都打字,

解析PHP的Yii框架中cookie和session功能的相关操作_php技巧

Sessions 和 请求 和 响应类似, 默认可通过为yii\web\Session 实例的session 应用组件 来访问sessions. 开启和关闭 Sessions 可使用以下代码来开启和关闭session. $session = Yii::$app->session; // 检查session是否开启 if ($session->isActive) ... // 开启session $session->open(); // 关闭session $session->clo

深入解析PHP的Yii框架中的缓存功能_php技巧

数据缓存是指将一些 PHP 变量存储到缓存中,使用时再从缓存中取回.它也是更高级缓存特性的基础,例如查询缓存和内容缓存. 如下代码是一个典型的数据缓存使用模式.其中 $cache 指向缓存组件: // 尝试从缓存中取回 $data $data = $cache->get($key); if ($data === false) { // $data 在缓存中没有找到,则重新计算它的值 // 将 $data 存放到缓存供下次使用 $cache->set($key, $data); } // 这儿

详解PHP的Yii框架中扩展的安装与使用_php技巧

扩展是专门设计的在 Yii 应用中随时可拿来使用的, 并可重发布的软件包.例如, yiisoft/yii2-debug 扩展在你的应用的每个页面底部添加一个方便用于调试的工具栏, 帮助你简单地抓取页面生成的情况. 你可以使用扩展来加速你的开发过程. 信息:本文中我们使用的术语 "扩展" 特指 Yii 软件包.而用术语 "软件包" 和 "库" 指代非 Yii 专用的通常意义上的软件包.使用扩展 要使用扩展,你要先安装它.大多数扩展以 Compose