我尝试在listview中显示我的表列数据,但它不起作用。在gridview中,允许插入字段名称。我不能在listview中这样做吗?
我试试这段代码。
$feedbackFound = new SqlDataProvider([
'sql'=> "SELECT * FROM feedback WHERE module_id='$tutorModule->id'",
]);
ListView::widget([
'dataProvider' => $feedbackFound,
//'filterModel' => $searchModel,
'itemView' => [
'PositiveComment',
'GoodAt',
'MakeMost',
//['class' => 'yii\grid\ActionColumn'],
],
]);
答案 0 :(得分:2)
ListView没有gridview所做的花哨处理 - 它接收数据并将其传递给视图,为您提供一些便利项目(分页,排序,过滤等)。
便利物品的展示和使用取决于您。 itemView
与gridview的columns
键不同。它应该是部分视图(即您创建的php文件或回调),因此您需要定义该局部视图。这为您提供了数据模型中每个项目的显示灵活性,但需要一些工作。
答案 1 :(得分:1)
考虑这段代码,它会从左到右,从上到下显示三列中的项目。此代码使用以下引导程序css类:col-sm-?
和row
来构建正确的网格。
$columns = 3;
$cl = 12 / $columns;
echo ListView::widget([
'dataProvider' => $dataProvider,
'layout' => '{items}{pager}',
'itemOptions' => ['class' => "col-sm-$cl"],
'itemView' => '_view_list_item',
'options' => ['class' => 'grid-list-view' ],
'beforeItem' => function ($model, $key, $index, $widget) use ($columns) {
if ( $index % $columns == 0 ) {
return "<div class='row'>";
}
},
'afterItem' => function ($model, $key, $index, $widget) use ($columns) {
if ( $index != 0 && $index % ($columns - 1) == 0 ) {
return "</div>";
}
}
]);
if ( $dataProvider->totalCount % $columns != 0 ) {
echo "</div>";
}
答案 2 :(得分:0)
不幸的是,sim的答案对我不起作用,这就是为什么我做了一点修改:
$colsCount = 4;
echo ListView::widget([
'dataProvider' => $itemDataProvider,
'layout' => '{items}{pager}',
'options' => ['class' => 'TOP_CLASS_HERE'],
'itemOptions' => ['class' => "ITEM_CLASS_HERE"],
'beforeItem' => function ($model, $key, $index, $widget) use ($colsCount) {
if ($index % $colsCount === 0) {
return "<div class='row'>";
}
},
'itemView' => function ($model, $key, $index, $widget) {
return $this->render('@frontend/views/item/_card.php', ['item' => $model]);
},
'afterItem' => function ($model, $key, $index, $widget) use ($colsCount) {
$content = '';
if (($index > 0) && ($index % $colsCount === $colsCount - 1)) {
$content .= "</div>";
}
return $content;
},
]);
if ($itemDataProvider->count % $colsCount !== 0) {
echo "</div>";
}
我在大量数据上进行了测试,效果很好。我喜欢这种解决方案,希望对您有所帮助。
答案 3 :(得分:0)
此变体不适用于 \yii\bootstrap\Tabs 和分页,因为代码总是插入 div:
//if ( $dataProvider->totalCount % $columns != 0 ) {
// echo "</div>";
//}
这个变体适用于 \yii\bootstrap\Tabs 和分页:
if ( $dataProvider->totalCount % $columns != 0 ) {
if ($dataProvider->pagination->pageCount-1 == $dataProvider->pagination->page) {
echo "</div>";
}
}