Программирование, веб-кодинг

Динамический показ GridView в Yii2

Yii2 Dynamically render GridView

Динамический показ GridView в Yii2

Сам виджет GridView уже описывал тут.

Есть сущность "семинары" и сущность "категории". Они связаны через поле «seminar.category_id», поэтому можно использовать seminar->category->name для получения названия категории, к которой относится семинар.

Нужно генерировать GridView для каждой категории, который будет содержать относящиеся к ней семинары.

Используем ActiveDataProvider

SeminarController/actionIndex:

$categories = Category::find()->where(['Status'=>Category::STATUS_ACTIVE])->All();
$dataProviders = [];
foreach ($categories as $category) {
    $dataProviders[] = new ActiveDataProvider([
        'query' => $category->getSeminars(),
    ]);
}
return $this->render('index', compact('dataProviders'));


view/seminar/index.php:

<?php
    foreach ($dataProviders as $dataProvider) {
?>
<?=
    $this->render('_categoryRow', [
        'dataProvider' => $dataProvider,
    ]);
?>
<?php } ?>

/view/seminar/_categoryRow.php:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    ...

Дополнительные подсказки:

  1. Получить название текущей категории из $dataProvider ('name' - поле в модели category) $dataProvider->query->primaryModel->name
  2. Получить количество семинаров в текущей категории из $dataProvider
    $dataProvider->getCount()