【发布时间】:2015-12-03 19:03:17
【问题描述】:
我有一个表格/模型“研讨会”(培训)和一个表格/模型“类别”。 它们通过“seminar.category_id”字段连接,例如我可以使用研讨会->类别->名称。一切正常。
现在我想为每个类别呈现一个 GridView 小部件,其中包含相应的研讨会。
1) 我应该使用多个 GridView 还是有更好的方法 (我不需要过滤等)
2)如果1)的答案是肯定的GridView,我应该如何实现呢?
- 将代码放在一个小部件中并通过foreach调用
- 将代码放在视图中,通过foreach调用
- 将代码放在视图中,通过ListView调用
- ...
抱歉,问题很短,如有必要,我可以发布更多详细信息,但这更像是一个概念性问题。
更新 - 解决方案:
Hesam 的回答为我指明了正确的方向。由于我必须修改答案,我将在此处发布我的解决方案。
注意:我使用了 ActiveDataProvider
研讨会控制器/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'));
努力让视图显示 - 不要使用:
<?php foreach(...){ $this->render()}... ?>
查看/研讨会/index.php:
<?php
foreach ($dataProviders as $dataProvider) {
?>
<?=
$this->render('_categoryRow', [
'dataProvider' => $dataProvider,
]);
?>
<?php } ?>
/view/seminar/_categoryRow.php:
<?= GridView::widget([
'dataProvider' => $dataProvider,
...
其他提示:
-
从$dataProvider获取当前类别名称(“name”是“category”的一列)
$dataProvider->query->primaryModel->name
-
从 $dataProvider 获取当前的研讨会计数
$dataProvider->getCount()
【问题讨论】:
标签: gridview yii2 yii2-advanced-app