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'],//动做列,用于显示动做按钮(查看、更新、删除三个图标按钮)
        ],
相关文章
相关标签/搜索