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 5.0 Pear安装方法
Dec 06 PHP
PHP获取网站域名和地址的代码
Aug 17 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
PHP5中Cookie与 Session使用详解
Apr 30 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 PHP
ThinkPHP模型详解
Jul 27 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 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
str_replace只替换一次字符串的方法
2013/04/09 PHP
php支付宝接口用法分析
2015/01/04 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
Python处理中文标点符号大集合
2018/05/14 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
Python如何在bool函数中取值
2020/09/21 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
介绍一下.net和Java的特点和区别
2012/09/26 面试题
数控技术专业推荐信
2013/11/01 职场文书
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
优良学风班申请材料
2014/02/13 职场文书
个人委托书怎么写
2014/09/17 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
公司员工手册范本
2015/05/14 职场文书
2019年思想汇报
2019/06/20 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
PyTorch的Debug指南
2021/05/07 Python
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript