Вопрос по Flash

14 views
Skip to first unread message

LORDotU

unread,
May 24, 2011, 6:26:20 AM5/24/11
to Frog CMS RU
И снова, здравствуйте!

На этот раз у меня появился вопрос по поводу класса Flash. Итак,
проблема в следующем:

1. Я написал плагин для организации календаря событий, коим
обязательно поделюсь в ближайшее время с сообществом.

2. У плагина есть страница настроек.

3. Настройки плагина сохраняются при отправлении формы на адрес plugin/
calendar/save, обработку которого обеспечивает метод save() класса
CalendarController.

3. Если все настройки корректны и были записаны в базу, то я при
помощи класса Flash делаю Flash::set('success', "Данные успешно
обновлены!") и выполняю редирект на plugin/calendar/settings.

4. После редиректа на странице настроек не появляется зеленое окошко с
уведомлением и переменная-массив flash_framework сессии пуста.

5. Ок, делаю по-другому: после записи в базу настроек я не выполняю
редирект, но выполняю метод settings() данного плагина через
self::settings() - всплывающее окошко не отображается, но переменная-
массив уже содержит уведомление.

В чем может быть причина?

Александр Маслаков

unread,
May 24, 2011, 6:35:32 AM5/24/11
to frog-...@googlegroups.com
Получается вам после того, как вы сделали 

Flash::set('success', ...);
// затем
$this->settings()

делайте redirect и на след. странице должно появиться окошко.

24 мая 2011 г. 13:26 пользователь LORDotU <levs...@gmail.com> написал:
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком
группы "Frog CMS RU" в Группах Google.
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
frog-...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу:
frog-cms-ru...@googlegroups.com
Чтобы выполнить другие действия, посетите страницу группы
http://groups.google.ru/group/frog-cms-ru?hl=ru



--
С уважением, Маслаков Александр.
Разработка сайтов: дизайн, программирование, подготовка информации, сопровождение

Портфолио: http://up.dn.ua/
Тел.: +38 099 669–15–06
Эл. почта: jmas.u...@gmail.com
Skype: maslakov.alexandre

LORDotU

unread,
May 24, 2011, 6:58:02 AM5/24/11
to Frog CMS RU
Все равно не хочет. Давайте я приведу пример кода:

class CalendarController extends PluginController {
public function __construct() {
$this->setLayout('backend');
}
//Сразу редиректим на страницу настроек, если зашли по /plugin/
calendar
public function index() {
redirect(get_url('plugin/calendar/settings'));
}
//Получаем из БД список страниц и подключаем страницу с переданными
параметрами
public function settings() {
$calendar_pages = Record::findAllFrom('Page', '`parent_id` = 1');
$this->display('calendar/views/settings', array(
'calendar_pages' => $calendar_pages
));
}
//Обработчик формы
public function save() {
if(!empty($_POST['calendar_pages'])) {
$parent_pages = Record::findAllFrom('Page', '`parent_id` = 1');
foreach($parent_pages as $page) {
$page->calendar = 0;
$page->save();
}

$modified = 0;
foreach($_POST['calendar_pages'] as $page_id) {
$modified_row = Record::findOneFrom('Page', '`id` = '.(int)
$page_id);

$modified_row->calendar = 1;

if($modified_row->save())
$modified++;
}
//Если все успешно записалось, то устанавливаем текст оповещения
if($modified == count($_POST['calendar_pages'])) {
Flash::set('succes', "Данные успешно обновлены!");
}
}
//Тут может быть несколько вариантов:
redirect(get_url('plugin/calendar')); //Такое - потом произойдет
редирект на страницу настроек
//self::settings(); или $this->settings(); - Подключаем страницу
настроек по адресу /plugin/calendar/save
//redirect(get_url('plugin/calendar/settings')); - Редиректим на
страницу настроек
/*Ни в одном из этих случаев не появляется окно с оповещением*/
}
}

On 24 май, 14:35, Александр Маслаков <jmas.ukra...@gmail.com> wrote:
> Получается вам после того, как вы сделали
>
> Flash::set('success', ...);
> // затем
> $this->settings()
>
> делайте redirect и на след. странице должно появиться окошко.
>

> 24 мая 2011 г. 13:26 пользователь LORDotU <levsh...@gmail.com> написал:

> Тел.: +38 099 669-15-06
> Эл. почта: jmas.ukra...@gmail.com
> Skype: maslakov.alexandre

Александр Маслаков

unread,
May 24, 2011, 7:08:48 AM5/24/11
to frog-...@googlegroups.com
Попробуйте сейчас

public function save() {
// сразу здесь добавить:

Flash::set('success', 'test');
redirect(get_url('plugin/calendar/settings'));

//...
}

Если это сработает, значит у вас просто не выполняется условие

                               if($modified == count($_POST['calendar_pages'])) {
                                       Flash::set('succes', "Данные успешно обновлены!");
                               }

Flash-сообщения работают только в случае redirect-а, потому что в классе Flash при инициализацци забираются все данные из переменной $_SESSION['framework_flash'] и затем эта переменная обнуляется. То есть если вызывать $this->settings(), то переменной в классе Flash не будет. Нужно делать redirect чтобы класс Flash опять забрал переменные из сессии.


24 мая 2011 г. 13:58 пользователь LORDotU <levs...@gmail.com> написал:

LORDotU

unread,
May 24, 2011, 7:13:57 AM5/24/11
to Frog CMS RU

$modified_row->calendar = 1;

> Получается вам после того, как вы сделали
>
> Flash::set('success', ...);
> // затем
> $this->settings()
>
> делайте redirect и на след. странице должно появиться окошко.
>

> 24 мая 2011 г. 13:26 пользователь LORDotU <levsh...@gmail.com> написал:

LORDotU

unread,
May 24, 2011, 7:17:16 AM5/24/11
to Frog CMS RU
Александр, спасибо Вам! Причина была в том, что я указал для Flash-
сообщения ключ succeS вместо succeSS. :)

On 24 май, 15:08, Александр Маслаков <jmas.ukra...@gmail.com> wrote:
> Попробуйте сейчас
>
> public function save() {
> // сразу здесь добавить:
>
> Flash::set('success', 'test');
> redirect(get_url('plugin/calendar/settings'));
>
> //...
>
> }
>
> Если это сработает, значит у вас просто не выполняется условие
>
>                                if($modified ==
> count($_POST['calendar_pages'])) {
>                                        Flash::set('succes', "Данные успешно
> обновлены!");
>                                }
>
> Flash-сообщения работают только в случае redirect-а, потому что в классе
> Flash при инициализацци забираются все данные из переменной
> $_SESSION['framework_flash'] и затем эта переменная обнуляется. То есть если
> вызывать $this->settings(), то переменной в классе Flash не будет. Нужно
> делать redirect чтобы класс Flash опять забрал переменные из сессии.
>

> 24 мая 2011 г. 13:58 пользователь LORDotU <levsh...@gmail.com> написал:

LORDotU

unread,
May 24, 2011, 7:17:22 AM5/24/11
to Frog CMS RU
Александр, спасибо Вам! Причина была в том, что я указал для Flash-
сообщения ключ succeS вместо succeSS. :)

On 24 май, 15:08, Александр Маслаков <jmas.ukra...@gmail.com> wrote:

> Попробуйте сейчас
>
> public function save() {
> // сразу здесь добавить:
>
> Flash::set('success', 'test');
> redirect(get_url('plugin/calendar/settings'));
>
> //...
>
> }
>
> Если это сработает, значит у вас просто не выполняется условие
>
>                                if($modified ==
> count($_POST['calendar_pages'])) {
>                                        Flash::set('succes', "Данные успешно
> обновлены!");
>                                }
>
> Flash-сообщения работают только в случае redirect-а, потому что в классе
> Flash при инициализацци забираются все данные из переменной
> $_SESSION['framework_flash'] и затем эта переменная обнуляется. То есть если
> вызывать $this->settings(), то переменной в классе Flash не будет. Нужно
> делать redirect чтобы класс Flash опять забрал переменные из сессии.
>

> 24 мая 2011 г. 13:58 пользователь LORDotU <levsh...@gmail.com> написал:

LORDotU

unread,
May 24, 2011, 7:18:01 AM5/24/11
to Frog CMS RU
Извиняюсь, за копии - FF что-то чудит.

Александр Маслаков

unread,
May 24, 2011, 7:25:04 AM5/24/11
to frog-...@googlegroups.com
Рад, что все работает. :)

24 мая 2011 г. 14:18 пользователь LORDotU <levs...@gmail.com> написал:
Reply all
Reply to author
Forward
0 new messages