我如何定制Yii2 gridview排序?

时间:2015-01-14 06:09:19

标签: php datagrid yii2

如何使用自定义gridview标题进行排序?

请在label header小部件Yii2中区分gridviewdataprovider

这是我的代码:

    <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'columns' => [
                 [
                   'class' => 'yii\grid\DataColumn',
                   'value' => function ($data) {
                    return $data->myTitle; 
                    },
                   'headerOptions' => ['style'=>'text-align:center'],
                   'header' => 'Page Title',
                   'label' => 'Title'
                ],
   ]); ?>

headerlabel执行相同的功能吗?

如何在$data->myTitle执行排序?

这是我的输出屏幕:

enter image description here

我想要页面标题,状态,修改日期应该是活动的。

提前致谢。

3 个答案:

答案 0 :(得分:14)

找到答案。

请在搜索模型中向ActiveDataProvider添加属性。

$dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
                'pageSize' => 5,
                ],
        'sort' => ['attributes' => ['myTitle']],
       ]);

在小部件中添加属性选项:

    <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'columns' => [
                 [
                   'class' => 'yii\grid\DataColumn',
                   'value' => function ($data) {
                    return $data->myTitle; 
                    },
                   'headerOptions' => ['style'=>'text-align:center'],
                   'attribute' => 'myTitle',
                   'label' => 'Page Title'
                ],
   ]); ?>

答案 1 :(得分:8)

由于myTitle是数据库中的字段而不是自定义值,因此您只能使用attribute。其余的可能是不必要的,例如默认classDataColumn

'columns' => [ 
    [ 
        'attribute' => 'myTitle',
        'label' => 'Label',
    ]

答案 2 :(得分:2)

我不太确定我理解您的问题,但排序选项可以包含在您的modelsearch.php中。所以在你的情况下你必须这样做。

$dataProvider = new ActiveDataProvider([
            'query' => $query,
            'sort'=> ['defaultOrder' => ['your_column'=>SORT_ASC]]
        ]);

如果myTitle是数据库中的字段,为什么要使用如此长的语法。刚

'Columns'=>[
           .. 
           'myTitle',
           ..
           ],

应该可以正常工作,并且可以根据需要激活排序

如果你想为列提供不同的标题/标签,请使用label而不是header,因为header只是一个单元格内容,不能用于排序,而label可以。 details

[
..
'attribute'=>'myTitle',
'label' => 'Page Title'
..
],