Yii2动态渲染小部件

时间:2016-09-05 19:59:15

标签: php jquery-ui yii2

我想渲染JQuery UI可排序列表(我正在使用Yii2 JUI小部件),用数据库表中的数据填充。我将数据从数据库传递到视图并将其放在变量中。项目HTML结构如下所示:

<div class="row row-item dist simple-border">
  <div class="col-md-4">
    <img alt="Bootstrap Image Preview" src="<IMAGE_PATH>" />
  </div>
    <div class="col-md-8">
      <h4>
        <ITEM DESCRIPTION>
      </h4>
    </div>
</div>

我的问题是:在Widget中填充项目的最佳方法是什么,因为无法在其中执行php代码。

<?= yii\jui\Sortable::widget([
    'items' => [
     ------<expected foreach php loop for each model>------
       ['content' =>
         <This is where one HTML item goes>
       ],
     ------<end foreach>------
     ],
     'options' => ['class' => 'connectedSortable',],
     'clientOptions' => ['cursor' => 'move', 'connectWith' => '.connectedSortable']
]) ?>

我的第一个想法是创建一个将项目内容作为字符串返回的函数,但它似乎不是一个好的,有效的实践。任何想法将不胜感激。问候。

编辑:到目前为止,我已经创建了一个函数,它通过连接呈现上面提到的项目。尽管如此,我并不认为这是正确的方法。我仍然是Yii的新手并且会感谢任何提示。问候。

1 个答案:

答案 0 :(得分:1)

我已经为我的问题找到了这样的解决方案,请随时查看并改进它。

  

控制器

public function actionIndex()
{
    $searchModel = new Exchange();
    $dataProvider = $searchModel->getOwnerItems(Yii::$app->request->queryParams);
    $ownerItems = $this->getOwnerItems($dataProvider);

    return $this->render('index', [
        'ownerItems' => $ownerItems,
    ]);

}

protected function getOwnerItems($dataProvider){
    $items=array();
    foreach($dataProvider->models as $model){
        $item=array('content' => '<div class="row row-item dist simple-border"> <div class="col-md-4"> <img alt="Bootstrap Image Preview" src="uploads/'.$model->image.'" /> </div> <div class="col-md-8"> <h4>'. $model->name .'</h4> </div> </div>');
        array_push($items,$item);
    }
    return $items;
}
  

查看

<?= yii\jui\Sortable::widget([
   'items' => $ownerItems,
   'options' => ['class' => 'connectedSortable',],
   'clientOptions' => ['cursor' => 'move', 'connectWith' => '.connectedSortable']
]) ?>

我知道这个解决方案可能存在不完善之处,但我目前还没有其他想法。此致