YiiFramwork-Очистить текущие данные рендеринга и рендерить новые данные вместо перенаправления

Я хотел бы спросить, есть ли такой случай, когда я могу очистить текущую визуализированную страницу и затем выполнить рендеринг с набором нового макета? Я знаю, что могу добиться этого, вызвав перенаправление, но мне нужно было бы создать другой набор действий только для обработки 1 макета. Есть ли способ, которым я могу сделать это в одном действии? Вот как я это делаю в настоящее время, но я не могу очистить предыдущий макет и сделать новый набор нового макета …

/**
* Change a user's password
* @param int $id Owner's id
*
*/
public function actionChngPassword($id)
{
$this->pageTitle = 'Change Password';

$model=Users::model()->findByPk($id);
$model->scenario = 'chngPwd';
$this->performAjaxValidation($model);
$returnUrl = Yii::app()->homeUrl;

if(isset($_POST['Users'])){
$model->attributes = $_POST['Users'];
if($model->validate()){
$model->scenario = "";
$ip = Users::getRealIp();
$time = date('d-m-Y H:i:s');
$name = $model->usrname;

$model->old_pwd = $model->pwd;
$model->pwd = CPasswordHelper::hashPassword($model->newpwd);
$model->pw_change_on = $time = date('d-m-Y H:i:s');
$model->save();

// Send email noti to user
$revert_link= $this->createAbsoluteUrl('users/revertPassword', array('id' => $model->user_id, 'pwhash' => urlencode($model->pwd)));

ob_start();
$INC_DIR = UrlMgmt::getBaseAbsoluteUrl() . "/protected/views/users/mailtemplate/";
include($INC_DIR . "pwChange_email.php");
$view = ob_get_contents();
ob_end_clean();

Mailer::sendMail('Viralenz Member Accounts Management', $model->email_addr, 'Viralenz Password Changed!', $view);

Yii::app()->clientScript->registerMetaTag("3;url={$returnUrl}", null, 'refresh');
$this->render('msg_pwchange',array('c'=>"change"));
}

}

$this->render('chngPassword', array('model' => $model));

}

Заметил, что вторая часть рендеринга добавлена ​​сверху … Я хочу, чтобы она очистила все и повторно отрисовала набор новой компоновки …

Re Render

Есть ли другой подход, который я могу использовать вместо перенаправления на другое действие?

0

Решение

Если вы используете ajax для рендеринга, вы можете заменить представление «chngPassword» на «msg_pwchange» без перенаправления на другое действие.
Укажите идентификатор (например, response_id) для внешнего элемента «chngPassword» и выполните вызов ajax, нажимая кнопку «Изменить», как показано ниже:

$.ajax({
type: 'POST',
data: {...provide here...},
url: '<?php echo Yii::app()->getbaseurl(TRUE). '/controller_id/ChngPassword' ?>',
success: function(str) {
$('#response_id').html(str);
}
});

Модификация для действия контроллера:

public function actionChngPassword($id){

——пользовательские коды ————

if(isset($_POST['Users'])){

——пользовательские коды ——

        $this->renderPartial('msg_pwchange',array('c'=>"change"));
}

}

$this->render('chngPassword', array('model' => $model));

}

Функция renderPartial () возвращает только вид определенного файла без макета. Теперь мы можем заменить предыдущий вид новым (ответ ajax).

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]