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个人网站架设连环讲(三)
Oct 09 PHP
可以在线执行PHP代码包装修正版
Mar 15 PHP
php导入excel文件到mysql数据库的方法
Jan 14 PHP
检测codeigniter脚本消耗内存情况的方法
Mar 21 PHP
PHP中foreach()用法汇总
Jul 02 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
php查询操作实现投票功能
May 09 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 PHP
PHP token验证生成原理实例分析
Jun 05 PHP
PhpStorm+xdebug+postman调试技巧分享
Sep 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
PHP 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
php cookie的操作实现代码(登录)
2010/12/29 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
header跳转和include包含问题详解
2012/09/08 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
python自动翻译实现方法
2016/05/28 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
Python3 replace()函数使用方法
2018/03/19 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
keras导入weights方式
2020/06/12 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
.NET概念性的面试题
2012/02/29 面试题
2013年军训通讯稿
2014/02/05 职场文书
房地产开盘策划方案
2014/02/10 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server