ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
首先我们需要用Composer安装一个导出组件:[kartik-v/yii2-export](https://github.com/kartik-v/yii2-export) > 这个组件依赖一个PDF导出组件[kartik-v/yii2-mpdf](https://github.com/kartik-v/yii2-mpdf),100多M,所以安装可能很慢,需要耐心等候 > 不过新版本好像默认不依赖此PDF组件了 安装完毕后,打开`config/web.php`,给`$config`变量添加一个成员: ```php 'modules' => [ 'gridview' => [ 'class' => 'kartik\grid\Module', ], ], ``` 打开相应的视图文件,例如`views/user/index.php`,修改默认`GridView`的命名空间,并引用导出菜单类 ```php use kartik\grid\GridView; use kartik\export\ExportMenu; ``` 用一个变量来记录需要显示及导出的字段信息,例如 ```php $gridColumns = [ ['class' => 'yii\grid\SerialColumn'], 'id', 'name', ['class' => 'yii\grid\ActionColumn'], ]; ``` 因为字段信息需要分别在导出菜单和表格视图中用到,所以用一个变量记录起来会比较方便调用、修改等 然后创建导出菜单。这里直接贴出我的代码,顺便介绍几个常用的可选参数 ```php <?= ExportMenu::widget([ 'dataProvider' => $dataProvider, 'columns' => $gridColumns, 'encoding' => 'gb2312', 'dropdownOptions' => [ 'label' => '导出', 'class' => 'btn btn-default' ], 'exportConfig' => [ ExportMenu::FORMAT_TEXT => false, ExportMenu::FORMAT_PDF => false, ExportMenu::FORMAT_EXCEL_X => FALSE, ], 'columnSelectorOptions'=>[ 'label' => '选择字段', ], 'filename' => '试用申请列表_'.date('Y-m-d'), 'selectedColumns'=> [1, 2], // 导出不选中#和操作栏 'hiddenColumns'=>[0, 3], // 隐藏#和操作栏 ])?> ``` 我来解释一下这些参数的含义吧: `encoding`:默认为UTF-8。为何我这里要设为GB2312呢?因为导出功能很多时候都需要导出excel表格,而excel表格多半使用office而不是WPS打开,而中文office不支持UTF8的表格,打开会乱码,所以只能用GB2312。而WPS在UTF8表格上就支持得挺好,表扬一个 `dropdownOptions`:导出按钮选项。可以设置导出文案之类 `exportConfig`:导出选项。我这里禁用了文本文档、PDF、Excel2007+的导出方式。禁文本文档是因为不美观,而且没啥意义;禁PDF是因为上面提到的PDF导出依赖组件太大(100+MB)且从项目需求上不需要导出pdf,所以我把这组件remove了;禁Excel2007+是因为在线上报错,可能是某个PHP扩展没开,没去深究,反正Excel95格式够用了 `columnSelectorOptions`:相信大家都能理解 `filename`:即导出文件名 `selectedColumns`:默认导出的字段。不添加此参数时默认选中全部,也会选中第一列自增序列`#`和最后一列操作列(就是默认有“查看修改删除”三大功能的那一列)。导出时如果不需要这些的话,就得添加此参数,并填写需要导出的字段的索引值,从0开始(0即`#`列) `hiddenColumns`:在导出菜单中隐藏的字段。隐藏后用户将无法手动选择导出#栏及操作栏 接下来创建表格视图,直接贴代码 ```php <?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'filterSelector' => "input[name='".$dataProvider->getPagination()->pageParam."']", 'columns' => $gridColumns, 'export' => false, ]); ?> ``` 其中的`export`参数需要讲讲。上面讲到有个很大的PDF导出组件[kartik-v/yii2-mpdf](https://github.com/kartik-v/yii2-mpdf),我嫌它没用(项目需求只是需要导出excel),就把它remove了,但紧接着导出组件就报错了。翻了好久[官方文档](http://demos.krajee.com/export)都没找到解决方案,好气噢。结果我一顿瞎摸索,发现填写了这个参数并赋值`false`即可解决remove掉pdf组件后导出组件报错的问题,并且不影响其他格式的正常导出 至此,导出组件应该能够正常工作了。Enjoy it!