Вывод данных в GridView с динамическим набором колонок

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Myst
Сообщения: 32
Зарегистрирован: 2016.01.22, 15:06

Вывод данных в GridView с динамическим набором колонок

Сообщение Myst »

Здравствуйте, прошу помощи по GridView.
Пытаюсь вывести в

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

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => $columns,
    ]);
?>
данные из $dataProvider. Используется ActiveDataProvider, запрос для него строится с помощью yii\db\Query().
Заранее не известен состав колонок, их название и тип данных в них (выбирается пользователем).
Колонки должны формироваться примерно так:

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

$columns[] = ['class' => 'yii\grid\ActionColumn', 'template' => '{view} {link}'];
foreach (откуда брать данные для колонок???) {
        $columns[] = [
            'attribute' => attribute_id',
            'format' => 'raw',
            'value' => function($model) {...},
            'headerOptions' => ['style' => $width]
            ];      
    }
Если я делаю так:

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

<?= GridView::widget([
        'dataProvider' => $dataProvider,
     // 'columns' => $columns,
    ]);
?>
, то данные выводятся но не управляемо, а мне нужно управлять выводом, форматировать даные в ячейках в зависимости от типа, добавлять атрибуты и т.д. Пока нет ясного понимания как строится Gridview... Подскажите пожалуйста как правильно сформировать колонки в цикле Foreach, откуда вытаскиваются данные колонок, например их названия? Понял, что сами данные присутствуют в переменной $models (вообще не понял откуда она берется), тут опять же говориться о переменной $model, вобщем запутался, help!
Если же делать без GridView, то придется в цикле вывести данные из $dataProvider->models, тогда откуда взять названия столбцов? Как организовать сортировку\фильтрацию?? по моему так еще больше проблем...
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

Re: Вывод данных в GridView с динамическим набором колонок

Сообщение za4me »

Возник тот же вопрос вчера вечером, хорошо что не пришлось создавать новую тему.

Я вот как подумал сделать динамику добавления/удаления пользователем полей для определенной GridView. GridView принимает для свойства $columns массив с именами колонок которые необходимо отображать.

Что я придумал, сделать таблицу и хранить в ней: user_id | columns.
В user_id естественно id пользователя, а в columns выбранные им колонки для отображения в json формате.

Но возникает другой вопрос, не все поля в GridView записаны строкой: Некоторые из полей - массивы:

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

[
    'attribute' => 'status',
    'filter' => $statuses,
    'value' => function ($model) {
        return ApDapStatuses::getStatusName($model->status);
    }
],
И нормально ли будет хранить их в БД?
Myst
Сообщения: 32
Зарегистрирован: 2016.01.22, 15:06

Re: Вывод данных в GridView с динамическим набором колонок

Сообщение Myst »

я пока храню в Yii::$app->params (пока не знаю хорошо это или плохо) примерно в таком же виде, название набора полей => сам набор в json: название поля, его тип для дальнейшей обработки, Id этого поля в таблице.
пока на ум пришло тоже сгенерить массив колонок на основании этих данных, обработать его предварительно и подсунуть в грид как переменную. пошел пробовать.
Ответить