首先我們需要用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!