現在記錄下Gridview的相關內容,也是強迫症犯了,Yii2自帶的Gridview雖然不錯,但是過濾欄如果一些欄位用不著,不會自動合併成一行,當然也可以過濾欄不用,而是在最上方自己寫一些需要檢索的數據,但是這樣很麻煩,還要自己去規劃樣式,寫檢索什麼的。正好在搜索將檢索欄和標題合併時,看到了kart ...
現在記錄下Gridview的相關內容,也是強迫症犯了,Yii2自帶的Gridview雖然不錯,但是過濾欄如果一些欄位用不著,不會自動合併成一行,當然也可以過濾欄不用,而是在最上方自己寫一些需要檢索的數據,但是這樣很麻煩,還要自己去規劃樣式,寫檢索什麼的。正好在搜索將檢索欄和標題合併時,看到了
Data column(預設)、Action column(操作)、Checkbox column(可選中)、Serial column(帶序列號)
2、標題名字會根據Model中的attributeLabels()方法,來自動替換成對應的中文。當然也可以通過‘label’來自己定義,而‘attribute’則是指定根據哪個欄位排序。其它的像是'visible'來隱藏顯示,'header'顯示頭部內容,'headerOptions'來定義css或style樣式等等。
[ 'label'=>'你想要的名稱', 'attribute'=>'id',//可以排序的欄位 ]
3、自定義顯示頁數和排序欄位,如果用到了searchModel,則需要在searchModel的search方法中定義,否則,需要在Controller中定義:
$dataProvider = new ActiveDataProvider([ 'query' => $query, 'pagination' => [ 'pageSize' => 15,//如果不定義,預設為20 ], 'sort' => ['attributes' => ['id']],//如果定義,則只能按照id來排序,否則所有欄位都可以 ]);
4、下拉菜單檢索,好比根據下拉菜單檢索用戶狀態,則需要先在model中定義相關的方法,然後在Gridview中再做處理:
//Model中,定義一個靜態方法 const STATUS_DELETED = 0; const STATUS_ACTIVE = 10; public static function getZhStatus($status=false){ $status_array= [ ''=>'請選擇', self::STATUS_DELETED=>'禁止', self::STATUS_ACTIVE=>'正常' ]; return $status==false?$status_array:ArrayHelper::getValue($status_array,$status,'未知'); } //Gridview中 [ 'attribute' => 'status', 'filter'=>Html::activeDropDownList($searchModel,'status',User::getZhStatus(),['class' => 'form-control ']), 'value'=>function($data){ return User::getZhStatus($data->status); }, ],
5、格式化時間,有好幾種方法:
方法一:類似上面的定義回調函數
[ 'attribute'=>'created_at', 'value'=>function($data){ return date('Y-m-d',$data->created_at); }, ]
方法二:用Gridview自帶的format配置
[ 'attribute'=>'created_at', 'format'=>['date','php:Y-m-d'], 'value'=>'created_at', ],
方法三:首先在config中配置好你的時間格式,否則會是英文格式的,然後再在Gridview中處理。
//在common/config/main.php中定義自己的時間、金錢等的格式 'components' => [ 'formatter' => [ 'dateFormat' => 'yyyy-MM-dd', 'datetimeFormat' => 'yyyy-MM-dd HH:mm:ss', 'decimalSeparator' => ',', 'thousandSeparator' => ' ', 'currencyCode' => 'CNY', ], ],
這裡用到了快速寫的一種方式:“attribute:format:label”(屬性:格式:標簽)這種格式,詳情點擊這裡的api文檔。所以我們這樣就可以了:(如果定義了上方,則方法二可以直接'format'=>'date'即可以正確顯示)
'created_at:date',
6、顯示超鏈接或圖片,都是用的回調函數的方法,這裡以超鏈接為例,註意format需要為'raw’,不對結果做任何格式化處理,具體的格式化方面可以點這裡看看。
[ 'attribute'=>'id', 'value'=>function($model, $key, $index, $column){ return Html::a($model->id,['user/view','id'=>$model->id],['class' => 'profile-link','target'=>'_blank']); }, 'format' => 'raw', ],
7、關聯表單顯示,這個地方直接看指南吧,點這裡看,總之就是如果管理表單設置好後,直接用類似order.name這種就可以直接顯示使用,如果想要檢索排序,則需要在searchModel的rulers規則方法和attributes屬性方法中將此欄位寫入,在search方法中添加andFilterWhere的檢索,以及用$query->joinWith關聯欄位,$dataProvider->sort->attributes[]添加排序等。
8、自定義Action Column按鈕,
[ 'class' => 'yii\grid\ActionColumn', 'header'=>'操作', 'headerOptions'=>['width'=>'120'], 'template' => '{view} {update} {delete} {forbid} ', 'buttons'=>[ 'forbid'=>function($url,$model){ return Html::a('<i class="glyphicon glyphicon-remove-circle"></i>',['user/forbid','id'=>$model->id]); } ], ]
以上是Yii2自帶的Gridview的用法。再說下官方文檔及demo講的比較全了,它比原生的多了幾個列的形式,例如Editable Column(可編輯)、Radio Column(單選框)等,還多了一些其它功能,例如滾動時可以固定標題欄方便查看、可以總計、導出svn,excel等格式。這裡稍微說下:
,一開始安裝完成後可能會報錯pdf錯誤,因為這些關聯的還沒有安裝,可以按照提示安裝也可以先配置'export'=>false來取消導出功能,下麵導出時會詳細配置。
1、整體結構如下圖: