我想在Yii2列表视图中显示列数据
我试图在listview中显示我的表列数据,但它不起作用。在gridview中,允许插入字段名称。我不能在listview中执行此操作吗 我试试这个代码我想在Yii2列表视图中显示列数据,yii2,Yii2,我试图在listview中显示我的表列数据,但它不起作用。在gridview中,允许插入字段名称。我不能在listview中执行此操作吗 我试试这个代码 $feedbackFound = new SqlDataProvider([ 'sql'=> "SELECT * FROM feedback WHERE module_id='$tutorModule->id'", ]); ListView::widget([ 'dataProvid
$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'],
],
]);
ListView不像gridview那样具有奇特的处理方式——它接收数据并将其传递给视图,为您提供了一些便利项(分页、排序、筛选等)
方便物品的展示和使用由您决定
itemView
与gridview的columns
键不同。它应该是一个局部视图(即您创建的php文件或回调),因此您需要定义该局部视图。这使您能够灵活地显示数据模型中的每个项目,但需要做一些工作 考虑这段代码,它在三列中从左到右、从上到下显示项目。此代码使用以下引导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>";
}
$columns=3;
$cl=12/$columns;
echo ListView::小部件([
“dataProvider”=>$dataProvider,
'布局'=>'{items}{pager}',
'项目选项'=>['class'=>“列sm-$cl”],
“项目视图”=>“\u视图\u列表\u项目”,
'选项'=>['class'=>'网格列表视图'],
“beforeItem”=>函数($model、$key、$index、$widget)使用($columns){
如果($index%$columns==0){
返回“”;
}
},
'afterItem'=>函数($model、$key、$index、$widget)使用($columns){
如果($index!=0&&$index%($columns-1)==0){
返回“”;
}
}
]);
如果($dataProvider->totalCount%$columns!=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>";
}
$colscont=4;
echo ListView::小部件([
“dataProvider”=>$itemDataProvider,
'布局'=>'{items}{pager}',
“选项”=>[“类”=>“顶级类”],
'itemOptions'=>['class'=>“此处的项目类别”],
“beforeItem”=>函数($model、$key、$index、$widget)使用($colscont){
如果($index%$colscont==0){
返回“”;
}
},
“itemView”=>函数($model、$key、$index、$widget){
返回$this->render('@frontend/views/item/_card.php',['item'=>$model]);
},
“afterItem”=>函数($model、$key、$index、$widget)使用($colscont){
$content='';
如果(($index>0)和($index%$colscont====$colscont-1)){
$content.=”;
}
返回$content;
},
]);
如果($itemDataProvider->count%$colsCount!==0){
回声“;
}
我在大量数据上进行了测试,效果非常好。我喜欢这个解决方案,希望它能帮助别人。这个变体不适用于\yii\bootstrap\Tabs和分页,因为代码总是插入div:
//if ( $dataProvider->totalCount % $columns != 0 ) {
// echo "</div>";
//}
//如果($dataProvider->totalCount%$columns!=0){
//回声“;
//}
此变体使用\yii\bootstrap\Tabs和分页:
if ( $dataProvider->totalCount % $columns != 0 ) {
if ($dataProvider->pagination->pageCount-1 == $dataProvider->pagination->page) {
echo "</div>";
}
}
if($dataProvider->totalCount%$columns!=0){
如果($dataProvider->pagination->pageCount-1==$dataProvider->pagination->page){
回声“;
}
}
Hi ernie,我只想显示我的“反馈”表中的数据。它有6个字段。字段应该从上到下显示,而不是像GridViews那样从左到右。然后,你应该问这个问题(在一篇新文章中),而不是关于如何使用ListView的问题,否则你会在第一列之后陷入it不起作用的状态。您需要像@GHopper那样更改afterItem,它工作正常'afterItem'=>函数($model,$key,$index,$widget)使用($columns){if($index>0&($index%$columns==$columns-1)){return”“;}
注释代码是解决方案的一部分吗?还请解释一下您所做的工作以及为什么它会起作用。