我想渲染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的新手并且会感谢任何提示。问候。
答案 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']
]) ?>
我知道这个解决方案可能存在不完善之处,但我目前还没有其他想法。此致