GridView小部件的學習(一)

GridView提供排序,分頁和過濾數據等功能。 基本用法以下:php

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $filterModel
    'columns' => [
        'id',
        'name',
        'created_at:datetime',
        // ...
    ],
]) ?>

用dataProvider鍵指定數據提供者;用filterModel指定搜索過濾功能的搜索模型;用columns鍵指定須要展現的列及其格式。數組

全部的這些數據提供者ActiveDataProvider遵照如下模式:yii

$dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination'=>['pageSize'=>5],
            'sort'=>['defaultOrder'=>['id'=>SORT_ASC]]
        ]);

 

filterModel綁定了對應的查詢類(如PostSearch)在須要查詢輸入關聯表字段數據時,能夠經過在PostSearch類裏先新增重寫模型類的屬性,而後再經過Search方法查詢:ide

一、重寫attributes方法,調用array_merge()來添加一個新的屬性(以下新增了authorName)函數

public function attributes()
    {
        return array_merge(parent::attributes(),['authorName']);
    }

二、在屬性規則里加上新定義的屬性post

public function rules()
    {
        return [
            [['id', 'status', 'create_time', 'update_time', 'author_id'], 'integer'],
            [['title', 'content', 'tags','authorName'], 'safe'],//在這裏面加上authorName
        ];
    }

三、在Search方法裏,join關聯的表進行查詢this

$query->join('inner join','Adminuser','Post.author_id=Adminuser.id')
      ->andFilterWhere(['like','Adminuser.nickname',$this->authorName]);

 

對於columns鍵指定須要展現的列及其格式,能夠有如下鍵url

attribute:指定須要展現的屬性;code

lable:標籤名;orm

value:值;

format:格式;

filter:自定義過濾條件的輸入框;

contentOption:設置列的HTML格式屬性;

'columns' => [
            //['class' => 'yii\grid\SerialColumn'],//序號列,即行號(從1開始自動增加)

            //'id',
            [
                'attribute'=>'id',
                'contentOptions'=>['width'=>'30px'],
            ],


            //'content:ntext',
            //經過Comment的getter設置,顯示前20個字符
            [
                'attribute'=>'content',
                'value'=>'begining',
            ],


            /* //經過$value匿名函數設置顯示長度
            [
                'attribute'=>'content',
                'value'=>function($model){
                    $str=strip_tags($model->content);//strip_tags方法從字符串中去除 HTML 和 PHP 標記
                    $strLength=mb_strlen($str);//mb_strlen獲取字符串的長度
                    
                    return mb_substr($str,0,20,'utf-8').(($strLength>=8)?'...':'');//mb_substr方法獲取部分字符串
                }
            ], */


            //'status',
            [
                'attribute'=>'status',
                'value'=>'status0.name',
                'filter'=>common\models\Commentstatus::find()//獲取一個數組用於填充下拉查詢
                        ->select(['name','id'])
                        ->orderBy('position')
                        ->indexBy('id')
                        ->column(),
            ],


            //'create_time:datetime',
            [
                'attribute'=>'create_time',
                'format'=>['date','php:Y-m-d H:i:s']
            ],


            //'userid',
            [
                'attribute'=>'userid',
                'value'=>'user.username'
            ],


            //'email:email',
            //'url:url',


            //'post.title',
            //此處使用了添加Searc類裏新屬性的方法實現關聯表查詢
            [
                'attribute'=>'postTitle',
                'label'=>'文章標題',
                'value'=>'post.title',
            ],

            ['class' => 'yii\grid\ActionColumn'],//動做列,用於顯示動做按鈕(查看、更新、刪除三個圖標按鈕)
        ],
相關文章
相關標籤/搜索