1. 程式人生 > >yii2-GridView在開發中常用的功能及技巧

yii2-GridView在開發中常用的功能及技巧

GridView 小部件在開發中常用的功能及技巧。

資料網格或者說 GridView 小部件是Yii中最強大的部件之一。
它有一個屬性名叫 dataProvider ,這個屬效能夠提供一個數據提供者的示例並且可以顯示所提供的資料,即使用 yii\grid\GridView::columns 屬性的一組列配置,在一個表格中渲染每一行資料。

例如,

use yii\helpers\Html;
use yii\grid\GridView;   
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
]);?>

一、表格列

表格的列是通過 GridView 配置項中的 yii\grid\GridView::columns 屬性配置的.

<?php
use yii\grid\GridView;
echo GridView::widget([
    'dataProvider' => $dataProvider,
    
    //表格列值搜尋功能,注意一定要配合attribute才會顯示
    //$searchModel = new ArticleSearch();
    'filterModel' => $searchModel,
    
    //重新定義分頁樣式
    'layout'
=> '{items}<div class="text-right tooltip-demo">{pager}</div>', 'pager'=>[ //'options'=>['class'=>'hidden']//關閉分頁 'firstPageLabel'=>"First", 'prevPageLabel'=>'Prev', 'nextPageLabel'=>'Next', 'lastPageLabel'=>'Last', ] 'columns'
=> [ ['class' => 'yii\grid\SerialColumn'],//序列號從1自增長 // 資料提供者中所含資料所定義的簡單的列 // 使用的是模型的列的資料 'id', 'username', // 更復雜的列資料 [ 'class' => 'yii\grid\DataColumn', //由於是預設型別,可以省略 'value' => function ($data) { return $data->name; // 如果是陣列資料則為 $data['name'] , 例如,使用 SqlDataProvider 的情形。 }, ], ['label'=>'標題','value' => 'title'], ['label'=>'文章內容','format' => 'html','value' => 'content'], [ 'label'=>'文章類別', /*'attribute' => 'cid',產生一個a標籤,點選可排序*/ 'value' => 'cate.cname' //關聯表 ], [ //動作列yii\grid\ActionColumn //用於顯示一些動作按鈕,如每一行的更新、刪除操作。 'class' => 'yii\grid\ActionColumn', 'header' => '操作', 'template' => '{delete} {update}',//只需要展示刪除和更新 'headerOptions' => ['width' => '240'], 'buttons' => [ 'delete' => function($url, $model, $key){ return Html::a('<i class="fa fa-ban"></i> 刪除', ['del', 'id' => $key], [ 'class' => 'btn btn-default btn-xs', 'data' => ['confirm' => '你確定要刪除文章嗎?',] ] ); }, ], ], ], ]); ?>

1. 處理時間

資料列的主要配置項是 yii\grid\DataColumn::format 屬性。
它的值預設是使用 \yii\i18n\Formatter 應用元件。

[
'attribute' => 'created_at',
'format' => 'text',
'value' => function($data){return date("Y-m-d H:i:s",($data->created_at));},
],
[
'attribute' => 'updated_at',
'format' => 'text',
'value' => function($data){return date("Y-m-d H:i:s",($data->updated_at));},
],

2. 處理圖片

[
    'label'=>'封面圖',
    'format'=>'raw',
    'value'=>function($m){
        return Html::img($m->cover,
                    ['class' => 'img-circle',
                    'width' => 30]
        );
    }
],
[
'attribute' => 'image',
'format' => ['image',['width'=>'100','height'=>'100']],
'value'     => function ($data) {
return $data->image;
}
],
[
'attribute' => 'image',
'label'     => '圖片顯示',
'format' => 'raw',
'value'     => function ($data) {
$link = Html::a(Html::img($data->image, ['alt' => 'ImageSource','width' => 100,'height' => 100]),[$data->image]);
return $link;
}
],

3. 資料列有連結

 [
   'attribute' => 'title',
   'value' => function ($model, $key, $index, $column) {
            return Html::a($model->title, 
                ['article/view', 'id' => $key]);
    },
   'format' => 'raw',
],

4. 資料列顯示列舉值(男/女)

[
   'attribute' => 'sex',  
   'value'=>function ($model,$key,$index,$column){
          return $model->sex==1?'男':'女';   
    },
    
    //在搜尋條件(過濾條件)中使用下拉框來搜尋
    'filter' => ['1'=>'男','0'=>'女'],
    //or
    'filter' => Html::activeDropDownList($searchModel,
                'sex',['1'=>'男','0'=>'女'],
                ['prompt'=>'全部']
     )
],
[
    'label'=>'產品狀態',  
    'attribute' => 'pro_name',  
    'value' => function ($model) {
        $state = [
            '0' => '未發貨',
            '1' => '已發貨',
            '9' => '退貨,已處理',
        ];
     return $state[$model->pro_name];
    },
    'headerOptions' => ['width' => '120'] 
]