DbHelp.ru
Маленький Yii блог
Комментарии
Гость: http://u.to/oTJNEA - Smoking Lock - натуральный нативный комплекс, спо...
Гость: wh0cd2594827 [url=http://alli.us.com]alli orlistat 60mg[/url] Cheap Alli http://alli.us.com [url=htt...
Гость: wh0cd2594827 [url=http://buytadalissx.us]generic tadalis[/url] tadalis sx without prescription http:...
Гость: wh0cd2594827 [url=http://proscar365.us.com]proscar 1mg[/url] Order Proscar http://proscar365.us.com
Гость: essay writing service essay writing service best essay writing services professional essay writing s...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Как работать с флеш-сообщениями

Рубрика: Перевод Cookbook

Оцените эту статью:

Рейтинг: 0.00 (0)
16 Авг. 2010
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Yii Framework Blog img http://dbhelp.ruflash Флеш-сообщения используются для того, что бы сохранить в сессии некий текст, и после отображения его пользователю - сразу удалить.

Понятие "флеш-сообщение" никак не связано с технологие Flash от Adobe

---

Таким образом флеш-сообщения доступны только в текущем и следующем запросе. Флеш-сообщения могут быть установлены при помощи метода setFlash() класса CWebUser.

Например, вы хотите сообщить пользователю что "его пароль успешно изменен", для в нужном экшинсе контроллера добавляем следующий код:

Yii::app()->user->setFlash('success',"Пароль изменен");

Таким образом мы сохраняем в сессии переменную "success" со значением "Пароль изменен". Если вы хотите использовать больше чем одно флеш-сообщение - просто используйте уникальные значения "имени".

Теперь в файле отображения (там же где находится наша форма изменения пароля, к примеру) добавляем код проверки на наличие флеш-сообщения и его отображения:

<?php if(Yii::app()->user->hasFlash('success')):
        echo Yii::app()->user->getFlash('success');
endif; ?>

Для проверки существования сообщения мы использовали метод hasFlash(), для получения текста сообщения - getFlash();

Таким образом после того как флеш-сообщение было созданно в контроллере - оно будет показано в отображении.

Теперь добавим немного "красоты". Обернем наше сообщение в класс "info" что бы использовать эффект плавного затухания. Получим:

<?php if(Yii::app()->user->hasFlash('success')):?>
    <div class="info">
        <?php echo Yii::app()->user->getFlash('success'); ?>
    </div>
<?php endif; ?>

В экшинсе после создания флеш сообщения, добавим следующий код:

Yii::app()->clientScript->registerScript(
   'myHideEffect',
   '$(".info").animate({opacity: 1.0}, 3000).fadeOut("slow");',
   CClientScript::POS_READY
);

По этому примеру вы можете использовать и другие возможности jQuery или javascript для обработки сообщения.

 

Реальный пример использования

Контроллер:

<?php
    public function actionReg() {
        $model = new User('reg');
                
            if (!empty($_POST['User'])) {
                // получили данные с формы
                $model->attributes = $_POST['User'];               

                if ($model->validate()) {
                    
                    $message = "Спасибо за регистрацию!";
                    $this->sendHtmlMail(...);

                    $model->insert();
                
                    // данные в базу добавлены, можна и флеш-сообщение показать:
                    
                    Yii::app()->clientScript->registerScript(
                       'myHideEffect',
                       '$(".flash-success").animate({opacity: 1.0}, 5000).fadeOut("slow");',
                       CClientScript::POS_READY
                    );
    
                    Yii::app()->user->setFlash('success',"На указанный email было отправленно письмо для подтверждения регистрации!");
                    
                } else {
                    // просто выводим форму
                }
            }
            
        $this->render('reg', array('model' => $model));
    }

Отображение (view/controller/reg):

<h1>Регистрация</h1>

<?php if(Yii::app()->user->hasFlash('success')):?>
    <div class="flash-success">
        <?php echo Yii::app()->user->getFlash('success'); ?>
    </div>
<?php endif; ?>

Дальше идет код формы регистрации...

Ссылки:



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Практически в каждом проекте мы сталкиваемся с тем что нам надо выводить даты. Это может быть все что угодно: ... "Выводим дату по человечески"

  2. Это руководство предназначено для более-менее продвинутых пользователей. Если вы только что начали работу с Yii Framework-ом, вам стоит вернутся ... "Многоязычность субдоменов и URL-правила"

  3. Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Урок 6 : Регистрация и авторизация. Часть 1"

[adm] zolter

Было сказано: Понедельник, 16 Август 2010

Маленький перевод того с чем сейчас часто работаю

[guest] МОТОРИСТ

Было сказано: Понедельник, 16 Август 2010

Вопросик: А разве в момент $model->insert() не происходит валидация? Тогда зачем if ($model->validate())?

P.S. Хорошая статья, давно интересовался данным вопросом.

[guest] Timlar

Было сказано: Понедельник, 16 Август 2010

hasFlash() использовать не обязательно. Если сообщение не было установлено, то просто ничего не выведется на экран. Еще как вариант, чтобы не писать постоянно обрамляющий див, можно переопределить метод setFlash() в компоненте WebUser:

public function setFlash($key, $value, $defaultValue=NULL) {
$value = ($value) ? '<div class="success">'.$value.'</div>' : NULL;
return parent::setFlash($key, $value, $defaultValue=NULL);
}

В таком случае див будет подставляться автоматически :)

[adm] zolter

Было сказано: Вторник, 17 Август 2010

to МОТОРИСТ
если не ошибаюсь валидация происходит при $model->save(). А при явных указаниях ->insert или ->update - нет. Если ошибаюсь - поправьте.

[adm] zolter

Было сказано: Вторник, 17 Август 2010

to Timlar
спасибо за прием!

[guest] RSol

Было сказано: Вторник, 17 Август 2010

to Timlar
hasFlash() приятно использовать чтобы выводить или не выводить форму, я делаю так:

<h1>Регистрация</h1>

<?php if(Yii::app()->user->hasFlash('success')):?>
<div class="flash-success">
<?php echo Yii::app()->user->getFlash('success'); ?>
</div>
<?php else: ?>
Дальше идет код формы регистрации...
<?php endif; ?>

Зачем отображать форму если пользователь уже зарегестрировался.

А вообще, я последнее время в лайоуте делаю несколько renderPartial для сообщений типа success, notify, error и т.п., чтобы не прописывать это каждый раз во вьювах.

[guest] zolter

Было сказано: Вторник, 17 Август 2010

Зачем отображать форму если пользователь уже зарегестрировался.


В данном случае пример с проекта, в котором пользователи очень часто регистрируют для себя больше одной учетной записи. С точки зрения удобства форму проще не скрывать.

ATI

Было сказано: Среда, 01 Сентябрь 2010

Хорошее решение для нотисов в админке. Спасибо автору.

[guest] elbek

Было сказано: Среда, 15 Сентябрь 2010

Vopros! pochemu posle soxraneniya (

$model->insert()
)
$this->redirect()
netu? Ato $_POST soxranyayet i browser yesho mojet peredat sam kogda polzovatel najimaet reload!


Yiit::app()->clientScript->registerScript() ne rabotaet psole reloada

[guest] elbek

Было сказано: Среда, 15 Сентябрь 2010

izvinite ne

$this->redirect()
a
$this->refresh();

[guest] zolter

Было сказано: Среда, 15 Сентябрь 2010

В данном случае это просто как пример работать с флеш сообщениями. Если вы сделаете флеш ил редирект - пользователь их просто не успеет увидеть.

Что бы небыло таких проблем вы можете просто скрывать свою форму если $_POST не пустой.

[guest] Гость

Было сказано: Вторник, 10 Июль 2012

Небольшая опечатка в самом начале статьи:
"Например, вы хотите сообщить пользователю что "его пароль успешно изменен", для ЭТОГО в нужном экшинсе контроллера добавляем следующий код:"

Пропущено слов "этого"

[guest] Гость

Было сказано: Вторник, 31 Январь 2017

guest test post
<a href="http://googlee.te/">bbcode</a>
<a href="http://googlee.te/">html</a>
http://googlee.te/ simple

[guest] Гость

Было сказано: Воскресенье, 26 Февраль 2017

guest test post
<a href="http://googlee.te/">bbcode</a>
<a href="http://googlee.te/">html</a>
http://googlee.te/ simple

[guest] Гость

Было сказано: Суббота, 04 Март 2017

guest test post
<a href="http://googlee.te/">bbcode</a>
<a href="http://googlee.te/">html</a>
http://googlee.te/ simple

[guest] Гость

Было сказано: Суббота, 11 Март 2017

Мoзги устали, они хотят oтдыхать. He зaвтра и не потом – прямo cейчас. Bыбeри свою флeш-игрушку, кoтoрая рaзгрузит твой мoзг в любое время дня и ночи. Никаких сложностeй – пoнятнo всем от 5+ до 100+. Cтань удaчливым, будь победителем, дай в морду бокcёру или покaтaйся на тaнчиках, провeди кpоликa по лaбиринту и найди моркoвку. Ты супеp-пупeр зaнят и тебе некогдa? Враньё, минутка-то всегда найдётся.

<a href=http://all-flesh.ru/>flash игры</a>

[guest] Гость

Было сказано: Вторник, 14 Март 2017

guest test post
<a href="http://googlee.te/">bbcode</a>
<a href="http://googlee.te/">html</a>
http://googlee.te/ simple

[guest] Гость

Было сказано: Четверг, 06 Апрель 2017

По исследованиям официальной отчетности доход большинства наших граждан близок к минимальному или все они вовсе трудятся без юридического оформления. Отсутствие учетных записей в трудовой книге - это стаж, который не будет учитываться при назначении пенсии. В таковых обстоятельствах претендовать на занятие оптимально оплачиваемой должности или приобретения нормального заработка по завершении трудовой активности нереально.
Оформление потребительского либо автокредита возможно при существовании справки 2-НДФЛ. Официальный заработок, вписанный в бумаге, этого очевидно будет мало для получения займа. Работодатель не будет рисковать и не укажет реально оплачиваемый доход. Означенные повыше затруднения имеют приемлемое разрешение, и состоит оно в приобретении нужных бумаг, оформленных в согласовании с действующим законодательством.


<a href=http://2ndflmoscva.ru/2ndfl.html>купить 2 ндфл</a>

[guest] Гость

Было сказано: Четверг, 27 Апрель 2017

Вкуснейший экзотический плод - мангустин, стал настоящим открытием в диетологии!
Он содержит РЕКОРДНОЕ количество полезных веществ, стимулирующих активное жиросжигание и снижающих вес!
Сироп мангустина растопит до 10 кг жира за 2 недели!
Спаситесь от ожирения и сократите риск инфаркта, диабета и гипертонии на 89%.
Перейти на сайт: http://mangystin.bxox.info/

[guest] Гость

Было сказано: Четверг, 27 Апрель 2017

Вкуснейший экзотический плод - мангустин, стал настоящим открытием в диетологии!
Он содержит РЕКОРДНОЕ количество полезных веществ, стимулирующих активное жиросжигание и снижающих вес!
Сироп мангустина растопит до 10 кг жира за 2 недели!
Спаситесь от ожирения и сократите риск инфаркта, диабета и гипертонии на 89%.
Перейти на сайт: http://mangystin.bxox.info/

[guest] Гость

Было сказано: Четверг, 27 Апрель 2017

Вкуснейший экзотический плод - мангустин, стал настоящим открытием в диетологии!
Он содержит РЕКОРДНОЕ количество полезных веществ, стимулирующих активное жиросжигание и снижающих вес!
Сироп мангустина растопит до 10 кг жира за 2 недели!
Спаситесь от ожирения и сократите риск инфаркта, диабета и гипертонии на 89%.
Перейти на сайт: http://mangystin.bxox.info/

[guest] Гость

Было сказано: Понедельник, 01 Май 2017

АлкоБарьер – эффективное средство, которое выводит токсины из организма и устраняет тягу к спиртному. http://alko.1stbest.info/

[guest] Гость

Было сказано: Понедельник, 01 Май 2017

Где в Перми купить средство, напиток от алкоголизма (Alco Barrier)? Заказать, состав, инструкция по применению. http://alko.1stbest.info/

[guest] Гость

Было сказано: Понедельник, 01 Май 2017

Alergyx – это уникальная, безопасная и эффективная комбинация растительных экстрактов, которая, будучи принятой внутрь, уже в течение 10 минут блокирует реакцию организма на аллерген, останавливая или предотвращая проявление аллергии. Полный курсовой прием препарата в течение 30 дней полностью избавляет от хронических форм недуга, очищает от токсинов и восстанавливает организм.
ALERGYX помогает нашему телу выработать собственные «блокирующие антитела», которые НАВСЕГДА ИСКЛЮЧАТ ВОЗМОЖНОСТЬ ПОВТОРНОГО ВОЗНИКНОВЕНИЯ АЛЛЕРГИИ.
Официальный сайт: http://alergyx.bxox.info

[guest] Гость

Было сказано: Пятница, 05 Май 2017

Этот чай уникального пурпурного цвета, вот уже более шести тысяч лет выращивается в самых высоких горах на земле - Непале и Тибете и используется в разнообразных медицинских целях, а сейчас засчёт огромного набора полезных свойств заслуженно набирает популярность во всём мире.
Пурпурный чай - это мощнейший жиросжигатель, который к тому же препятствует возникновению новых отложений, превращая жир в энергию.
Официальный сайт: http://pur.bxox.info

[guest] Гость

Было сказано: Воскресенье, 07 Май 2017

Этот чай уникального пурпурного цвета, вот уже более шести тысяч лет выращивается в самых высоких горах на земле - Непале и Тибете и используется в разнообразных медицинских целях, а сейчас засчёт огромного набора полезных свойств заслуженно набирает популярность во всём мире.
Пурпурный чай - это мощнейший жиросжигатель, который к тому же препятствует возникновению новых отложений, превращая жир в энергию.
Официальный сайт: http://pur.bxox.info

[guest] Гость

Было сказано: Понедельник, 08 Май 2017

Этот чай уникального пурпурного цвета, вот уже более шести тысяч лет выращивается в самых высоких горах на земле - Непале и Тибете и используется в разнообразных медицинских целях, а сейчас засчёт огромного набора полезных свойств заслуженно набирает популярность во всём мире.
Пурпурный чай - это мощнейший жиросжигатель, который к тому же препятствует возникновению новых отложений, превращая жир в энергию.
Официальный сайт: http://pur.bxox.info

[guest] Гость

Было сказано: Четверг, 11 Май 2017

Крем Здоров от морщин: отзывы и где купить

Официальный сайт: http://zdorov.bxox.info

[guest] Гость

Было сказано: Воскресенье, 06 Август 2017

I recomed ,http://www.dubaiconnect.ae/en/s432/DubaiConnect-ae/c1736-Events/i7969-Training-in-Couple-Therapy - hypnotherapy in dubai to get excellent services in Dubai.

[guest] Гость

Было сказано: Вторник, 29 Август 2017

He is an immensely-powerful Inhuman born thousands of years previous to the principle story who seeks to regain his misplaced energy, and is believed to have been the inspiration for stories about evil and the Devil.

Visit site: http://audiojungle.net/item/christmas-piano/19056234/

http://audiojungle.net/user/momentumofmelody/portfolio?ref=MomentumOfMelody
http://audiojungle.net/item/piano-inspiration/18285725?ref=MomentumOfMelody
http://audiojungle.net/user/ie_sound/portfolio?ref=IE_Sound
http://audiojungle.net/item/motivation-ambient-kit/19508793?ref=IE_Sound

[guest] Гость

Было сказано: Суббота, 09 Сентябрь 2017

http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

[guest] Гость

Было сказано: Суббота, 09 Сентябрь 2017

http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

[guest] Гость

Было сказано: Суббота, 09 Сентябрь 2017

http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

[guest] Гость

Было сказано: Воскресенье, 10 Сентябрь 2017

http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

[guest] Гость

Было сказано: Воскресенье, 10 Сентябрь 2017

http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

Оставить комментарий


Код:
Имя: