Модальное окно для связанных данных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Fixpix
Сообщения: 38
Зарегистрирован: 2018.07.31, 15:33

Модальное окно для связанных данных

Сообщение Fixpix »

Всем привет!

Как лучше реализовать редактирование другой модели в модальном окне, к примеру есть два контроллера и две модели Customers и Orders, у меня есть таблица где я показываю GridView Customers, при клике на какого нибудь клиента хочу показывать его заказы в модальном окне DetailView и если надо редактировать. Как лучше это сделать? Как организовать запрос к другой модели и контроллеру? И вообще это правильный подход?
Fixpix
Сообщения: 38
Зарегистрирован: 2018.07.31, 15:33

Re: Модальное окно для связанных данных

Сообщение Fixpix »

Всем привет.

сделал вот так, создал еще одну вьюшку в Orders, и уже с вьюшки Customers index вызываю то что нужно

при клике на строчку в GridView

Код: Выделить всё

'rowOptions' =>
  function ($model, $key, $index, $grid) {
  $r = Url::to(['orders/_details', 'id' => $model->id,]);
  return ['class' => 'orders-detail', 'data-href' => $r,];
},
Modal

Код: Выделить всё

Modal::begin([
    'id'=>'ordersModal',
    'size' => \yii\bootstrap\Modal::SIZE_LARGE,
    'header' => '<h3>'.'Orders:'.$model->orders->id.'</h3>',
]);

echo '<div id="ordersContent"></div>';

Modal::end();
js

Код: Выделить всё

$('.orders-detail').on('click', function() {
    $('#ordersModal').modal('show')
        .find('#ordersContent')
        .load($(this).data('href'));
});
в OrdersController

Код: Выделить всё

public function actionDetails($id)
{
    $model = $this->findModel($id, true);

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['customers/index', 'id'=>$model->id]);
    }

    return $this->renderAjax('_details', ['model'=>$model]);
}
сама вьюшка с DetailView _details.php

Код: Выделить всё

echo Html::beginForm('','post',[
    'id' => 'orders_detailview',
]);
?>

<div class="orders_detailview">
    <?php
    try {
        echo DetailView::widget([
            'model' => $model,
            'hAlign' => 'right',
            'vAlign' => 'middle',
            'attributes' => [
                [
                    'columns'=>[
                        [
                            'attribute'=>'id',
                        ],
                        [
                            ...
                        ],
                    ],
                ],
            ],
        ]);
    } catch (Exception $e) {
        return $e->getMessage();
    }
    ?>
    <p class="btn-modal">
        <?= Html::a('<i class="glyphicon glyphicon-pencil"></i> Редактировать', ['', 'id' => $model->id], [
            'class' => 'btn btn-default btn-update',
        ]) ?>
    </p>
</div>
<?=  Html::endForm(); ?>
Подскажите как сделать редактирование orders в самом модальном окне с помощью ajax? При клике на кнопку "редактировать", можно было бы поменять данные и сохранить.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Модальное окно для связанных данных

Сообщение Loveorigami »

Вверху же дал решене. 10 мин почитать, 5 мин. поставить. И никакого лишнего кода..
Закрыто