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


Posted in PHP onMay 24, 2017

本文实例讲述了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框架的PHP程序设计有所帮助。

PHP 相关文章推荐
整合了前面的PHP数据库连接类~~做成一个分页类!
Nov 25 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
php中用数组的方法设置cookies
Apr 21 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
浅谈php7的重大新特性
Oct 23 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
php实现在线考试系统【附源码】
Sep 18 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 PHP
[原创]php正则删除html代码中class样式属性的方法
May 24 #PHP
PHP 年月日的三级联动实例代码
May 24 #PHP
php验证码生成器
May 24 #PHP
php批量修改表结构实例
May 24 #PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 #PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 #PHP
php实现查询功能(数据访问)
May 23 #PHP
You might like
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
JS实现滑动插件
2020/01/15 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
简单使用Python自动生成文章
2014/12/25 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
Python中作用域的深入讲解
2018/12/10 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
Python运行异常管理解决方案
2020/03/09 Python
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
自我评价200字分享
2013/12/17 职场文书
幼儿园秋游感想
2014/03/12 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android