В чем состоит задача и что не так: После сохранения данных, нужно обновить страницу (родительское окно), но при этом после того как будет понятно что запись была создана. Если просто с помощью js обновить страницу, то flash пропадает и человек не поймет произошло изменение на странице или нет и сохранились ли введенные данные.
Решение должно быть применимо ко всем страницам, а не только к данной.
Из вариантов были такие:
- Сохранять сообщение в сессию и потом выводить их непосредственно из сессии, но такой вариант требует много манипуляций и возможно будет тяжело применим для других страниц сайта
- Сохранить сообщение открытое, но после загрузки страницы его скрывать средствами js, в этом возникает проблема, а точнее в том что при загрузке или медленном интернете сообщение может быть видно и это плохо.
- еще один вариант, что при отображении сообщения нужен какой-то параметр передать (как вариант в get), но тогда нужно придумать что бы при ручном обновлении страницы, сообщение это не оставалось
Controller
Код: Выделить всё
// Главный action
public function actionUpdate($id)
{
$model = $this->loadModel($id);
$this->pageHeading = 'Update Client #' . $model->id . ' "' . $model->username . '"';
if (isset($_POST['Client'])) {
$model->attributes = $_POST['Client'];
if ($model->save()) {
flash('success', 'Client Updated Successfully');
$this->redirect(array('update', 'id' => $id));
} else
flash('error', 'Error Updating Client');
}
$this->render('update', array(
'model' => $model,
));
}
// Action модального окна
public function actionCreateNewPost($id)
{
$model = new Post();
if (isset($_POST['Post'])) {
$model->attributes = $_POST['Post'];
if ($model->save()) {
flash('success', 'Created Successfully');
$this->redirect(array('update', 'id' => $id));
} else {
flash('error', 'Error Creating');
}
}
$this->render('_form_create_new_post', array(
'model' => $model,
));
}
View:
Код: Выделить всё
<?php
/** - View: _form - **/
// Кнопка для вывода модального окна
$createUrl = Yii::app()->createUrl('client/createNewPost', array("asDialog" => 1, "id" => $model->id));
$label = 'Create New';
echo $this->widget('bootstrap.widgets.TbButton', array(
'label' => $label,
'type' => 'primary',
'url' => 'javascript:void(0)',
'size' => 'mini',
'htmlOptions' => array(
'onclick' => "$('#popup-frame').attr('src', '$createUrl'); $('#popup-dialog').dialog('option', 'title', '$label'); $('#popup-dialog').dialog('open');",
'style' => 'position: absolute; right: 10px;',
),
), true);
/** - View: _form_create_new_post - **/
<?php $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
'id' => 'client-new-post',
'enableAjaxValidation' => false,
)); ?>
<p class="help-block">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<?php echo $form->textFieldRow($model, 'email'); ?>
<?php echo $form->textFieldRow($model, 'text'); ?>
<div class="form-actions">
<?php $this->widget('bootstrap.widgets.TbButton', array(
'buttonType' => 'submit',
'type' => 'primary',
'label' => $model->isNewRecord ? 'Create' : 'Save',
)); ?>
</div>
<?php $this->endWidget(); ?>