2016-09-05 3 views
0

Я хотел бы отобразить список сортировки JQuery UI (я использую виджет Yii2 JUI), который будет заполнен данными из таблицы базы данных. Я передаю данные из базы данных в представление и имею ее в переменной. Элемент HTML структура выглядит следующим образом:Yii2 Render widget динамически

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

Мой вопрос: Что это лучший способ для заполнения элементов внутри виджета, так как невозможно выполнить код 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'] 
]) ?> 

Моя первая идея состояла в том, чтобы создать функцию, которая возвращает содержимое элемента в виде строки, но это не кажется хорошей, эффективной практике. Любые идеи очень приветствуются. С уважением.

EDIT: Пока я создал функцию, которая отображает упомянутые выше элементы путем конкатенации. Тем не менее, я не думаю, что это правильный способ сделать это. Я все еще новичок в 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'] 
]) ?> 

Я знаю о возможном несовершенстве этого решения, но у меня нет никаких других идей на данный момент. С уважением

Смежные вопросы