Шлешь-сообщение после редиректа

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
BikerLex
Сообщения: 97
Зарегистрирован: 2013.03.06, 12:12

Шлешь-сообщение после редиректа

Сообщение BikerLex » 2014.10.03, 13:03

На главной странице сайта есть форма для отправки сообщения. Надо после отправки сообщения редиректнутся назад на главную и вывести флешь-сообщение о удачной отправке. (Лучше бы конечно вывести модальное окно с сообщением, но как вызвать модальное окно из экшена не разобрался)

В общем всё построено так:
В layouts/main.php

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

    <?php $this->renderPartial('//layouts/header'); ?>
Дальше в layouts/header.php форма для отправки письма

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

<div class="form">
            <?php $form=$this->beginWidget('CActiveForm', array(
                'id'=>'contact-form',
                'action'=>Yii::app()->createUrl('//site/mail'),
                'enableClientValidation'=>true,
                'clientOptions'=>array(
                    'validateOnSubmit'=>true,
                ),
            )); ?>

            <div class="an-order">
                <?php $model=new MailForm;?>
                <?php echo $form->errorSummary($model); ?>

                <div class="an">
                    <?php echo $form->textField($model,'name',array('size'=>60,'maxlength'=>255,'encode'=>false,'value'=>'','placeholder'=>'Имя','class'=>'name')); ?>
                    <?php echo $form->error($model,'name'); ?>
                </div>

                <div class="an">
                    <?php echo $form->textField($model,'number',array('size'=>60,'maxlength'=>255,'encode'=>false,'value'=>'','placeholder'=>'Телефон','class'=>'number')); ?>
                    <?php echo $form->error($model,'number'); ?>
                </div>

                <div class="items"></div>

                <div class="an buttons">
                    <?php echo CHtml::submitButton('Закажи звонок', array('class'=>'submit_order')); ?>
                </div>

                <?php $this->endWidget(); ?>
            </div>

        </div><!-- form -->

<?php if(Yii::app()->user->hasFlash('mail')):?>
    <div class="info">
        <?php echo Yii::app()->user->getFlash('mail'); ?>
    </div>
<?php endif; ?>
И сам экшен

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

 public function actionMail()
    {
        $model=new MailForm;
        $mail=Setting::model()->findByPk(3);
//        var_dump($_POST); exit();
        if(isset($_POST['MailForm']))
        {
            $model->attributes=$_POST['MailForm'];
            if($model->validate())
            {
                $subject='=?UTF-8?B?'.base64_encode($model->name.' хочет знать цену').'?=';
                $headers="From: <Трым-бым-бым>\r\n".
                    "MIME-Version: 1.0\r\n".
                    "Content-Type: text/html; charset=UTF-8";

                $body = "";
                $name=$model->name;
                $body .= $name."<br>";
                $number=$model->number;
                $body .=$number ."<br>";

                mail($mail->mail,$subject,$body,$headers);
            }
        }
        $this->redirect('index');
        Yii::app()->user->setFlash('mail',"Письмо успешно отправлено! Ожидайте звонка!");
        Yii::app()->clientScript->registerScript(
        'myHideEffect',
        '$(".info").animate({opacity: 1.0}, 3000).fadeOut("slow");',
        CClientScript::POS_READY
        );
    }
Но вот флешь сообщения я не вижу. Что я сделал не так?

HQ0
Сообщения: 182
Зарегистрирован: 2012.10.17, 17:21

Re: Шлешь-сообщение после редиректа

Сообщение HQ0 » 2014.10.03, 13:12

setFlash после redirect.

registerScript не будет работать _как ожидаешь_ из-за, собственно, самого редиректа.

Аватара пользователя
BikerLex
Сообщения: 97
Зарегистрирован: 2013.03.06, 12:12

Re: Шлешь-сообщение после редиректа

Сообщение BikerLex » 2014.10.03, 13:45

HQ0 писал(а):setFlash после redirect.

registerScript не будет работать _как ожидаешь_ из-за, собственно, самого редиректа.
Ну да, всё логично. setFlash перенес выше redirect.
И регистрацию скрипта в представление, всё заработало. Благодарю. :D

Ответить