@Silverviql

Как вызвать модальное окно из controllera во view?

Всем добрый день! Необходимо вызвать модальное окно из контроллера во вьюшке .

В контроллере следующая функция
public function actionFulfilled($id)
    {
        $model = $this->findModel($id);
        $model->status = Zakaz::STATUS_EXECUTE;
        $model->id_unread = 0;
        if($model->fact_oplata === null ||  $model->fact_oplata === 0){
            Yii::$app->session->addFlash('errors', 'Нельзя закрыть заказ с оплатой 0!');
            $modalErrorOplata = true;
            return $this->redirect(['admin']);

        } else {
            if ($model->save()) {
                Yii::$app->session->addFlash('update', 'Выполнен заказ №'.$model->prefics);
                return $this->redirect(['admin']);
            }else {
                print_r($model->getErrors());
                Yii::$app->session->addFlash('errors', 'Произошла ошибка!');
            }
        }
    }


во вьюшке
<?php
var_dump($modalErrorOplata);
if($modalErrorOplata === true){
$script = <<<JS
        function modalView(button, modal) {
                $('body').on('click', button, function(e){
                    e.preventDefault();
                    $(modal).modal('show')
                        .find('.modalContent')
                        .load($(this).attr('value'));
                });
            }
            
            modalView('.modalZakazview-button', '#modalZakazview');
JS;
$this->registerJs($script);
}
?>

<?php Modal::begin([
    'id' => 'modalZakazview',
    'header' => '<h2>Полный просмотр</h2>'
]);
echo '<div class="modalContent"></div>';
Modal::end(); ?>


Я понимаю что $modalErrorOplata = true; в контроллере и проверка это во вьюшке полная фигня и так не передается параметр. Надо его как то положить в редирект или объявить в контроллере и как то читать во view....
  • Вопрос задан
  • 650 просмотров
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Передать параметр можно так
return $this->redirect(['admin', 'modalErrorOplata' => $modalErrorOplata]);


Но! Модальное окно Вы открываете после клика. При редиректе надо как-то имитировать клик по кнопке. Думаю, что лучше будет посмотреть в сторону ajax отправки данных и получения ответа.
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Контроллер формирует html на базе view и отправляет в браузеру в ответ на запрос из браузера. Модалка существует, когда начинает работать js, то есть в браузере. Так что Ваш вопрос совершенно не корректен.
Учитывая что у Вас есть .load($(this).attr('value'));
я так понимаю идет куда-то ajax, так что видимо по результату этого ajax надо или открывать или нет модалку. Если сформулируете полностью задачу, а не Ваше видение ее решения, возможно найдем более правильный алгоритм.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы