我以前没有使用过listview小部件,所以我找不到解决方案,因为我输出了一个列表,其中包含我想做的两件事:1.自动递增,每个列表项都有唯一的ID /数字,2 。在每个第三个列表项之后添加一个块(自定义代码段)。
我找不到与此有关的任何文档,所以不确定是否可行。
echo ListView::widget([
'id' => 'listofitems',
'dataProvider' => $dataProvider
]);
<div id="listofitems">
<div class="list_item_wrapper">
// my items which are in a seperate file
<div class="list_item_wrapper">
// when using the $index to check for a certain number the code will be build here.
</div>
</div>
// the needed solution
if($index == 12 || $index == 12){
echo 'some div here';
}
</div>
答案 0 :(得分:1)
默认情况下,小部件中有这样的索引。配置ListView小部件的'itemView'属性,这意味着您可以使用将为每个项目呈现的自定义视图。像这样:
<?= ListView::widget([
'id' => 'listofitems',
'dataProvider' => $dataProvider,
'itemView' => '/site/item',
?>
在视图文件/site/item.php
中,您可以访问当前项目的索引:
<?php
var_dump($index);
?>
答案 1 :(得分:0)
您可以对itemView
小部件使用ListView
选项,您可以在其中提供
指定为回调function ($model , $key , $index , $widget) {
,并在其中添加自定义HTML,然后执行自定义操作,例如检查每三个项目,或者通过调用id
并附加实际的$model->id
带有html标签属性,可以为您提供
$model
:混合数据模型$key
:与数据项关联的键值混合在一起$index
:整数,由$ dataProvider返回的items数组中数据项的从零开始的索引。$widget
:ListView,此小部件实例例如
echo ListView::widget([
'id' => 'listofitems',
'dataProvider' => $dataProvider,
'itemView'=>function ($model , $key , $index , $widget) {
//Do your Thing with Html you want to draw
//return '<div></div>';
}
]);
或提供该选项的视图文件路径,您仍然可以在视图文件中使用上述给定的参数
例如
echo ListView::widget([
'id' => 'listofitems',
'dataProvider' => $dataProvider,
'itemView'=>'_view-name'
]);
您的视图看起来像
<?php
use yii\helpers\Html;
?>
<div class="card">
<div class="header">
<h3 class="title"><?= Html::encode ( $model->title ) ?></h3>
</div>
<div class="body"><img src="<?= Html::encode ( $model->name ) ?>"><?= Html::encode ( $model->id ) ?></div>
<div class="footer"></div>
</div>
如果您的要求是在每个项目或任意数量的项目之后绘制或添加元素,则可以使用afterItem
选项,该选项采用一个匿名函数,一旦AFTER
呈现每个数据模型,该函数就会被调用,它传递与beforeItem
$model
:当前正在渲染的数据模型$key
:与当前数据模型关联的键值$index
:由$ dataProvider返回的模型数组中数据模型的从零开始的索引。$widget
:ListView对象UPDATE2
以下内容适用于给定的HTML
<div id="listofitems">
<?php
echo ListView::widget ( [
'id' => 'listofitems' ,
'dataProvider' => $dataProvider ,
'afterItem=' > function($model , $key , $index , $widget) {
// the needed solution
if ( $index == 12 || $index == 12 ) {
return 'some div here';
}
} ,
'itemView' => function ($model , $key , $index , $widget) {
//Do your Thing with Html you want to draw
return '<div class="list_item_wrapper">
// my items which are in a seperate file
<div class="list_item_wrapper">
// when using the $index to check for a certain number the code will be build here.
</div>
</div>
';
}
] );
?>
</div>