Как я выполняю пользовательскую сортировку по сетке Yii2?


Как я могу сортировать с помощью настроенного заголовка gridview?

Пожалуйста, укажите разницу между label и header в Yii2 gridview виджет dataprovider.

Вот мой код:

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

Выполняют ли header и label одну и ту же функцию?

Как я могу выполнить сортировку в $data->myTitle?

Вот мой экран вывода:

enter image description here

Я хочу, чтобы Заголовок страницы, Статус, Дата изменения были активны.

Заранее благодарю.

Author: Sathish, 2015-01-14

3 answers

Нашел ответ.

Пожалуйста, добавьте атрибуты в 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'
                ],
   ]); ?>
 13
Author: Sathish, 2016-02-08 04:11:44

Поскольку myTitle является полем из базы данных, а не пользовательским значением, вы можете просто использовать атрибут . Остальное может быть ненужным, например, значение по умолчанию class равно DataColumn

'columns' => [ 
    [ 
        'attribute' => 'myTitle',
        'label' => 'Label',
    ]
 8
Author: topher, 2016-05-26 11:39:59

Я не очень уверен, что понимаю ваш вопрос, но опция сортировки может быть включена в ваш modelsearch.php. Так что в вашем случае вы должны поступить вот так.

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

Если myTitle является полем в базе данных, почему вы используете такой длинный синтаксис. Просто

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

Должно работать нормально и должно быть активным для сортировки по вашему желанию

Если вам нужен другой заголовок/метка для столбца, используйте метку вместо заголовка, так как заголовок - это только содержимое ячейки и его нельзя использовать для сортировки, в то время как метка мочь. подробности

[
..
'attribute'=>'myTitle',
'label' => 'Page Title'
..
],
 2
Author: Pawan, 2015-01-15 09:53:15