@AlexSer

Можно ли каким либо образом столбцы задать через параметр Gridview Yii2?

Подскажите пожалуйста! Отправляю Ajax запрос на контроллер, в зависимости от параметра контроллер обращается к соответствующей модели, соответственно, меняются столбцы при выводе gridview. Можно ли поставить условие, в Gridview, чтобы выбор столбцов зависел от выбранной модели.
'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        [

            'attribute'=>'sid',
            'label' => 'Номер отправки',

        ],
        [

            'attribute'=>'ts',
            'label' => 'Время',

        ],
]

Например если Gridview не видит столбец ts, то показать другой столбец! как то так...
  • Вопрос задан
  • 204 просмотра
Решения вопроса 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Конечно можно. Столбцы - это же массив. Формировать массив можно как Вам заблагорассудится и передавать в виджет в виде переменной.
В ряде случаев это может быть метод в моделе, например в search model.
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Думаю что можно попробовать так (набросал пример на коленке):
<?= Html::a('1', ['index', 'columns' => 1], ['class' => 'btn btn-success']) ?>
<?= Html::a('2', ['index', 'columns' => 2], ['class' => 'btn btn-success']) ?>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => $columns
    ]); ?>

В контролере:
public function actionIndex()
    {

        if(Yii::$app->request->get('columns') == 1){
            $searchModel = new AutobazaAddressSearch();
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
            $columns = [
                'id',
                'client',
                'firma'
            ];
        }
        else{
            $searchModel = new CarControlSearch();
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
            $columns = [
                'id',
                'mark',
                'model'
            ];
        }
        
        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'columns' => $columns
        ]);
    }

Никакого ajax я сюда не прикреплял, но думаю, что Вы сами разберётесь что к чему. Можно использовать Pjax без настроек, должно сработать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы