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 创建标签云函数代码
May 26 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
如何使用Strace调试工具
Jun 03 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
Nov 29 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 PHP
php中对象引用和复制实例分析
Aug 14 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
php生成静态页面的简单示例
2014/04/17 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
Jquery中ajax方法data参数的用法小结
2014/02/12 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
使用Python写CUDA程序的方法
2017/03/27 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
python与mysql数据库交互的实现
2020/01/06 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
MYSQL支持事务吗
2013/08/09 面试题
中学劳技课教师的自我评价
2014/02/05 职场文书
会计的岗位职责
2014/03/15 职场文书
高三家长寄语
2014/04/03 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
博士论文答辩开场白
2015/06/01 职场文书
情感电台广播稿
2015/08/18 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书