GridView подменить значения в ячейках

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

GridView подменить значения в ячейках

Сообщение Vespertilio »

Собственно есть стандартная сгенерированная Gii табличка:

Код: Выделить всё

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
            'user_id',
            // 'video_id',
            // 'channel_id',
            // 'category_id',
            'post',
            'status',
            'created_at',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>
Нужно подменить значения столбце, к примеру status на основании условия, например: (status === 10) ? 'published' : 'deleted' ;

Как такое сделать?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: GridView подменить значения в ячейках

Сообщение ElisDN »

Код: Выделить всё

'columns' => [
    ['class' => 'yii\grid\SerialColumn'],
    'id',
    'user_id',
    'post',
    [
        'attribute' => 'status',
        'value' => function ($data) { return $data->status === 10 ? 'published' : 'deleted'; },
    ]
    'created_at',
    ['class' => 'yii\grid\ActionColumn'],
],
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: GridView подменить значения в ячейках

Сообщение Vespertilio »

ElisDN писал(а):

Код: Выделить всё

'columns' => [
    ['class' => 'yii\grid\SerialColumn'],
    'id',
    'user_id',
    'post',
    [
        'attribute' => 'status',
        'value' => function ($data) { return $data->status === 10 ? 'published' : 'deleted'; },
    ]
    'created_at',
    ['class' => 'yii\grid\ActionColumn'],
], 
Спасибо, большое! То что нужно.
arogachev
Сообщения: 52
Зарегистрирован: 2014.09.09, 14:32

Re: GridView подменить значения в ячейках

Сообщение arogachev »

Да, вы можете это сделать через анонимную функцию в value.
Небольшие рекомендации:
1) 10 замените на константу.
2) Если требуется вывод более чем в одном месте, саму проверку поместите в отдельный метод модели, что-то типа getStatusLabel().
Мой профиль на Github
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: GridView подменить значения в ячейках

Сообщение Andrewkha »

Друзья,
А чем отличается content от value?
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: GridView подменить значения в ячейках

Сообщение Insolita »

В базовом классе Column есть только content - вызывается как пользовательская функция https://github.com/yiisoft/yii2/blob/ma ... n.php#L148 в DataColumn - есть value которая может быть строкой или замыканием https://github.com/yiisoft/yii2/blob/ma ... n.php#L184 и внутри столбца она уже преобразовывается
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: GridView подменить значения в ячейках

Сообщение Andrewkha »

А с точки зрения использования? Есть ли рекомендации, для каких сценариев использовать value, а для каких content?
Ну и в довесок совершенно ламерский вопрос. В чем различие callable и closure? Видимо, суть различия двух свойств именно в этом, content это callable, а value это closure...
Ответить