简体   繁体   中英

How i do custom Yii2 gridview sort?

How can I sort with a customized gridview header?

Please give the difference between label and header in the Yii2 gridview widget dataprovider .

Here is my code:

    <?= 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'
                ],
   ]); ?>

Do header and label perform the same function?

How can I perform sorting in $data->myTitle ?

Here my Output Screen:

在此输入图像描述

I want Page Title, Status, Date Modified should be active.

Thanks in advance.

Found the answer.

Please add attributes to ActiveDataProvider in your Search Model.

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

Add the attribute option in widget:

    <?= 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'
                ],
   ]); ?>

Since myTitle is a field from the database and not a custom value, you can just use attribute . The rest may be unnecessary eg the default class is DataColumn

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

I am not very sure I understand your question, but sorting option can be included in your modelsearch.php . So in your case you have to do like this.

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

if myTitle is a field in the database, why you are using such a long syntax. Just

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

should work fine and should be active for sorting as you want

if you want a different header/label for the column, use label instead of header as header is only a cell content and cannot be used for sorting, while label can. details

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM