<?php
use yii\grid\GridView;
use yii\data\ActiveDataProvider;
$dataProvider = new ActiveDataProvider([
'query' => Post::find(),
'pagination' => ['pageSize' => 20],
]);
echo GridView::widget([
'dataProvider' => $dataProvider,
]);
?>
<?php
echo GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
'title', // 直接顯示屬性
'category.name', // 關聯模型屬性
'content:html', // 格式化輸出 (html/ntext/email/url/date/time/datetime)
[
'attribute' => 'create_time',
'label' => '建立時間',
'value' => function ($model) {
return date('M j, Y', $model->create_time);
},
'format' => 'raw',
],
[
'label' => '作者',
'value' => function ($model) {
return $model->author->username;
},
],
[
'class' => 'yii\grid\ActionColumn', // 操作按鈕列
'template' => '{view} {update} {delete}',
'buttons' => [
'view' => function ($url, $model) {
return Html::a('', $url);
},
],
],
],
]);
?>
| 屬性 | 說明 | 範例 |
|---|---|---|
| attribute | 模型屬性名 (用於排序/過濾) | 'title' |
| label | 欄位標題 | '文章標題' |
| value | 顯示內容:字串/匿名函式/閉包 | function($m){ return $m->name; } |
| format | 格式化:raw/html/text/ntext/email/url/date/time/datetime/boolean | 'html' |
| headerOptions | 表頭 <th> HTML 屬性 | ['width' => '100px'] |
| contentOptions | 儲存格 <td> HTML 屬性 | ['class' => 'text-center'] |
| filter | 過濾輸入框:true/false/字串/陣列 | ['1'=>'啟用','0'=>'停用'] |
| enableSorting | 是否啟用排序 | false |
| visible | 是否顯示 | Yii::$app->user->can('admin') |
| 屬性 | 說明 |
|---|---|
| dataProvider | 資料來源 (必填),實作 DataProviderInterface |
| filterModel | 搜尋模型,搭配 `filter` 屬性啟用欄位過濾 |
| showHeader | 是否顯示表頭 |
| showFooter | 是否顯示表尾 |
| emptyText | 無資料時顯示文字 |
| rowOptions | 每列 <tr> HTML 屬性,可為閉包 function($model, $key, $index) |
| beforeRow | 每列前插入內容閉包 |
| afterRow | 每列後插入內容閉包 |
| pager | 分頁器設定陣列 |
| sorter | 排序連結設定 |
預設啟用 `ajaxUpdate` (容器 ID)。若需關閉:`'ajaxUpdate' => false`。自訂容器:`'id' => 'my-grid'`。
搭配 `kartik-v/yii2-grid` 擴充套件可一鍵匯出 Excel/CSV/PDF:
<?php
use kartik\grid\GridView;
echo GridView::widget([
'dataProvider' => $dataProvider,
'export' => [
'fontAwesome' => true,
'showConfirmAlert' => false,
'target' => GridView::TARGET_BLANK,
],
'exportConfig' => [
GridView::EXCEL => ['label' => 'Excel', 'icon' => 'file-excel-o'],
GridView::CSV => ['label' => 'CSV', 'icon' => 'file-text-o'],
GridView::PDF => ['label' => 'PDF', 'icon' => 'file-pdf-o'],
],
]);
?>