На этот раз у меня появился вопрос по поводу класса Flash. Итак,
проблема в следующем:
1. Я написал плагин для организации календаря событий, коим
обязательно поделюсь в ближайшее время с сообществом.
2. У плагина есть страница настроек.
3. Настройки плагина сохраняются при отправлении формы на адрес plugin/
calendar/save, обработку которого обеспечивает метод save() класса
CalendarController.
3. Если все настройки корректны и были записаны в базу, то я при
помощи класса Flash делаю Flash::set('success', "Данные успешно
обновлены!") и выполняю редирект на plugin/calendar/settings.
4. После редиректа на странице настроек не появляется зеленое окошко с
уведомлением и переменная-массив flash_framework сессии пуста.
5. Ок, делаю по-другому: после записи в базу настроек я не выполняю
редирект, но выполняю метод settings() данного плагина через
self::settings() - всплывающее окошко не отображается, но переменная-
массив уже содержит уведомление.
В чем может быть причина?
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком
группы "Frog CMS RU" в Группах Google.
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
frog-...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу:
frog-cms-ru...@googlegroups.com
Чтобы выполнить другие действия, посетите страницу группы
http://groups.google.ru/group/frog-cms-ru?hl=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
$modified_row->calendar = 1;
> Получается вам после того, как вы сделали
>
> Flash::set('success', ...);
> // затем
> $this->settings()
>
> делайте redirect и на след. странице должно появиться окошко.
>
> 24 мая 2011 г. 13:26 пользователь LORDotU <levsh...@gmail.com> написал:
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> написал:
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> написал: