在yii2 listview小部件中的第三个列表项之后添加块

时间:2018-07-23 12:53:42

标签: yii2

我以前没有使用过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>

2 个答案:

答案 0 :(得分:1)

默认情况下,小部件中有这样的索引。配置ListView小部件的'itemView'属性,这意味着您可以使用将为每个项目呈现的自定义视图。像这样:

<?= ListView::widget([
    'id' => 'listofitems',
    'dataProvider' => $dataProvider,
    'itemView' => '/site/item',
?>

在视图文件/site/item.php中,您可以访问当前项目的索引:

<?php 
    var_dump($index);
?>

More info about the itemView property here.

答案 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>