У меня есть модальное всплывающее окно, после того как пользователь отправит данные, я хочу показать результаты в том же всплывающем окне. Как мне перезагрузить это модальное представление? Спасибо.

popup view

Это всплывающее окно:

<div class="site-popup">
    <h1><?= Html::encode($this->title) ?></h1>

    <div class="row">
        <div class="col-lg-5">
            <?php $form = ActiveForm::begin(['id' => 'popup-form']); ?>
                <?= $form->field($model, 'pattern')->textArea(['rows' => 1]) ?>

                <div class="form-group">
                    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'popup-button']) ?>
                </div>

            <?php ActiveForm::end(); ?>
        </div>
</div>

 <?php
    echo "<pre>";
    print_r($model->data); 
 ?>

Это представление, которое вызывает приведенное выше модальное всплывающее окно:

<p>
    <?= Html::button('Search', ['value' =>Url::to('index.php?r=site/mypopup'),'class' =>'btn btn-success', 'id'=>'modalButton']) ?>
 </p>
        <?php
            Modal::begin([
            'header'=> '<h4>Search</h4>',  
            'id' => 'modal',
            'size' => 'modal-lg',
            ]);

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

            Modal::end();
       ?>

Файл js:

$(function(){
    //get the click of the search button
    $('#modalButton').click(function(){
        $('#modal').modal('show')
            .find('#modalContent')
            .load($(this).attr('value'));
        }); 
});

Контроллер:

public function actionPopup()
{

 $model = new PopupForm();

   if ($model->load(Yii::$app->request->post()) && $model->validate()) 
   {
      $model->insertPopup();
         return $this->renderAjax('mypopup', ['model' => $model]);

            } else {
                return $this->renderAjax('mypopup', [
                    'model' => $model,
                ]);
            } 
}
3
Jan Beeck 28 Июн 2017 в 00:44
Используйте только кнопку вместо отправки, а затем вызовите ajax onclick и верните представление в том же модальном режиме.
 – 
Rajesh Pradhan
30 Июн 2017 в 21:13
Что вы имеете в виду с: «вернуть представление в том же модальном режиме». Спасибо @Rajesh Pradhan
 – 
Jan Beeck
1 Июл 2017 в 05:33
Я имею в виду вызов ajax, если затем сохранить, затем вернуть ответ в модальном режиме
 – 
Rajesh Pradhan
1 Июл 2017 в 12:10

2 ответа

Вы пробовали обернуть блок с помощью Pjax ?
Yii2 будет обрабатывать отправку формы и отображать результаты контроллера в модальном всплывающем окне.

<div class="site-popup">
    <h1><?= Html::encode($this->title) ?></h1>

    <div class="row">
        <div class="col-lg-5">
            <?php Pjax::begin(['enablePushState' => false]); ?>
                <?php $form = ActiveForm::begin(['id' => 'popup-form']); ?>
                <?= $form->field($model, 'pattern')->textArea(['rows' => 1]) ?>

                <div class="form-group">
                    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'popup-button']) ?>
                </div>

                <?php ActiveForm::end(); ?>
            <?php Pjax::end(); ?>
        </div>
    </div>
</div>
2
Azamat 28 Июн 2017 в 07:17
Я пробовал описанное выше (оберните всю ActiveForm с помощью Pjax), но всплывающее окно не перезагружается после отправки данных. Что еще нужно сделать? Спасибо.
 – 
Jan Beeck
28 Июн 2017 в 07:45

Вы используете событие щелчка на кнопке. Вместо события щелчка в js вам нужно будет вызвать событие отправки, подобное этому.

$(function(){

    //get the click of the search button
    $('.site-popup form').submit(function(){
        $('#modal').modal('show')
            .find('#modalContent')
            .load($(this).attr('value'));
        }); 
       return false
});
0
Pang 3 Июл 2017 в 12:25
Спасибо за ответ @Ramesh Mahajan, но всплывающее окно не появляется с приведенным выше кодом :( Что может быть не так с файлом js? Спасибо.
 – 
Jan Beeck
28 Июн 2017 в 20:04