2016-09-05 49 views
0

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

<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

我发现这样的解决方案,我的问题,随时审查和改进。

控制器

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'] 
]) ?> 

我知道这种解决方案可能不完美,但我目前没有其他的想法。问候