您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Yii2中GridView常見操作有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
是否顯示某列案例
我們舉一個簡單的案例
條件:有一個get形參數type
需求:僅且type的值等于1的時候,列name才顯示,否則該列不顯示
代碼實現如下:
[ 'attribute' => 'name', 'value' => $model->name, 'visible' => intval(Yii::$app->request->get('type')) == 1, ],
實現方式也是很簡單滴。
鏈接可點擊跳轉案例
這個跟接下來我們要說的html渲染的效果十分類似,這里要說的是列的屬性值 format,具體都有哪些格式可查看文件 yii\i18n\Formatter.php,各種format都可以解決
[ 'attribute' => 'order_id', 'value' => function ($model) { return Html::a($model->order_id, "/order?id={$model->order_id}", ['target' => '_blank']); }, 'format' => 'raw', ],
顯示圖片案例
同上,這里只需要指定format格式為image即可,format第二個參數可設定圖片大小,可參考下面的代碼
[ 'label' => '頭像', 'format' => [ 'image', [ 'width'=>'84', 'height'=>'84' ] ], 'value' => function ($model) { return $model->image; } ],
html渲染案例
什么意思喃,舉個例子,我們有一個字段,標記為title,但是這個title不一樣,ta含有html標簽,我們不想在頁面上展示<p>title123<p>這種形式,我們想要title123以p標簽的形式展示,代碼可參考如下,只需要指定format為raw形式即可
[ 'attribute' => 'title', 'value' => function ($model) { return Html::encode($model->title); }, 'format' => 'raw', ],
自定義按鈕案例
往往列表頁我們不想要刪除按鈕,想在增加一個比如獲取xxx按鈕,怎么搞呢?這里需要設置ActionColumn類,修改配置項template并在buttons項增加template里增加的get-xxx即可
[ 'class' => 'yii\grid\ActionColumn', 'template' => '{get-xxx} {view} {update}', 'header' => '操作', 'buttons' => [ 'get-xxx' => function ($url, $model, $key) { return Html::a('獲取xxx', $url, ['title' => '獲取xxx'] ); }, ], ],
設定寬度案例
舉個簡單的例子,我們的title列,太長了,能不能給我先定下這一列的寬度?
答案:能。
請看示例:
[ 'attribute' => 'title', 'value' => 'title', 'headerOptions' => ['width' => '100'], ],
只需要指定配置項headerOptions即可。
自定義字段案例
啥時自定義?這里我們是指在表格里增加一列且數據庫中不存在對應的列。假如我們新增一列 訂單消費金額money且該表不存在該字段
[ 'attribute' => '消費金額', 'value' => function ($model) { // 這里可以根據該表的其他字段進行關聯獲取 } ],
自定義行樣式
有小伙伴說了,gii生成的這個gridview表格呀,行跟行的顏色不明顯,看著難受,我滴乖乖,具體怎么難受咱們就不追究了。我們來看看怎么定義行樣式
<?= GridView::widget([ // ...... 'dataProvider' => $dataProvider, 'rowOptions' => function($model, $key, $index, $grid) { return ['class' => $index % 2 ==0 ? 'label-red' : 'label-green']; }, // ...... ]); ?>
前面的操作我們都是依據列column的,這里因為是對行的控制,所以我們配置rowOptions要稍微注意一下。此外,自定義的label-red和label-green需要有對應的樣式實現,這里我們看一下頁面的實際效果
增加按鈕調用js操作案例
那邊產品經理走過來了,小王呀,你這個修改狀態的功能很頻繁,每次都要先點進詳情頁才能修改,能不能我在列表頁面上鼠標那么一點就成功修改了呢?
其實就是一個異步請求操作了當前行的狀態嘛,我們來看看gridview里面是怎么實現的。
[ 'class' => 'yii\grid\ActionColumn', 'header' => '操作', 'template' => '{view} {update} {update-status}', 'buttons' => [ 'update-status' => function ($url, $model, $key) { return Html::a('更新狀態', 'javascript:;', ['onclick'=>'update_status(this, '.$model->id.');']); }, ], ],
我們需要在頁面寫js實現方法 update_status, 關于如何在頁面底部加載js請點擊參考
補充:GridView 小部件在開發中常用的功能及技巧。
數據網格或者說 GridView 小部件是Yii中最強大的部件之一。
它有一個屬性名叫 dataProvider ,這個屬性能夠提供一個數據提供者的示例并且可以顯示所提供的數據,即使用 yii\grid\GridView::columns 屬性的一組列配置,在一個表格中渲染每一行數據。
例如,
use yii\grid\GridView; echo yii\grid\GridView::widget([ 'dataProvider' => $dataProvider, ]);
一、表格列
表格的列是通過 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 應用組件。
[ 'label'=>'更新日期', 'format' => ['date', 'php:Y-m-d'], 'value' => 'updated_at' ], //or [ //'attribute' => 'created_at', 'label'=>'更新時間', 'value'=>function($model){ return date('Y-m-d H:i:s',$model->created_at); }, 'headerOptions' => ['width' => '170'], ],
2. 處理圖片
[ 'label'=>'封面圖', 'format'=>'raw', 'value'=>function($m){ return Html::img($m->cover, ['class' => 'img-circle', 'width' => 30] ); } ],
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'] ]
感謝各位的閱讀!關于“Yii2中GridView常見操作有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。