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 相关文章推荐
无限级别菜单的实现
Oct 09 PHP
用PHP和ACCESS写聊天室(六)
Oct 09 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
PHP SEO优化之URL优化方法
Apr 21 PHP
php使用codebase生成随机数
Mar 25 PHP
ThinkPHP CURD方法之order方法详解
Jun 18 PHP
合格的PHP程序员必备技能
Nov 13 PHP
php+ajax无刷新分页实例详解
Dec 07 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
php如何利用pecl安装mongodb扩展详解
Jan 09 PHP
tp5.1 框架join方法用法实例分析
May 26 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 MSSQL 存储过程的方法
2008/12/24 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
php中的登陆login实例代码
2016/06/20 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
React如何避免重渲染
2018/04/10 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
django的settings中设置中文支持的实现
2019/04/28 Python
keras导入weights方式
2020/06/12 Python
Django框架请求生命周期实现原理
2020/11/13 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
八年级英语教学反思
2014/01/09 职场文书
销售队伍口号
2014/06/11 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
开业庆典致辞
2015/08/01 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python