Как в плагине перенаправить на другую страницу после отправки формы?
Пытаюсь разобраться с написанием плагинов. Сделал заготовку, добавляющую шутки на сайт. Пока разобрался с созданием новой таблицы в БД и добавлением в нее информации. Споткнулся на том, что необходимо после отправки формы с текстом перенаправлять пользователя на другую страницу. Подскажите, пожалуйста, каким образом это можно сделать?
Имеем экшен jokes и ивенты index и add. Добавление шутки происходит в ивенте add, после него необходим переход на index. Вот что у меня на данный момент прописано в файле classes\actions\ActionJokes.class.php:
Имеем экшен jokes и ивенты index и add. Добавление шутки происходит в ивенте add, после него необходим переход на index. Вот что у меня на данный момент прописано в файле classes\actions\ActionJokes.class.php:
<?php class PluginJokes_ActionJokes extends ActionPlugin { /** * Инициализация экшена */ public function Init() { $this->SetDefaultEvent('index'); } /** * Регистрируем евенты */ protected function RegisterEvent() { $this->AddEvent('index','EventIndex'); $this->AddEvent('add','EventAdd'); } /********************************************************************************** ************************ РЕАЛИЗАЦИЯ ЭКШЕНА *************************************** ********************************************************************************** */ protected function EventAdd() { /** * Проверяем отправлена ли форма с данными */ if (!isPost('submit_joke_save')) { return false; } /** * Заполняем свойства */ $oJoke=Engine::GetEntity('PluginJokes_Jokes'); $this->Security_ValidateSendForm(); $oJoke->setText(getRequest('text')); /** * Добавляем страницу */ if ($this->PluginJokes_Jokes_AddJoke($oJoke)) { $this->Message_AddNotice($this->Lang_Get('plugin.jokes.save_ok')); } else { $this->Message_AddError($this->Lang_Get('system_error')); } } protected function EventIndex() { } /** * Завершение работы экшена */ public function EventShutdown() { } } ?>
45 комментариев
На сколько я понял, можно после
добавить что-то типа этого
Где вместо
прописать свой путь. А вот в этом и проблема — не могу сообразить что добавить, чтобы на index перекинуло в итоге.
В LS 2 можно так:
А можно еще вопрос по пагинации? Ввод/вывод материалов получился. Выводится все на одной странице, к которой теперь пытаюсь прикрутить постраничность. Вот что имею в итоге:
В файле Jokes.mapper.class.php получаю записи следующим образом:
В файле Jokes.class.php получаю все записи:
И в файле ActionJokes.class.php:
В итоге имею ошибки:
На сколько понял, в
Не передаются $iCurrPage и $iPerPage, а откуда они вообще забираются сюда?
И по buildFilter: его где-то надо расписывать или он по какой-то другой причине не работает?
не значат, что если фильтр не задан, то сортировать по date_add?
В последнем варианте плагина я переписывал все по аналогии с топиками и экшеном index. В правильном направлении двигаюсь или речь о чем-то другом?
Просто неполная неделя изучения всего этого… многие вещи я не знаю даже как называются и делаю больше интуитивно, нежели осознанно. Прошу понять и простить. :)
Про ORM есть информация здесь livestreet.ru/blog/5083.html, там же в комментах я выкладывал пример плагина. Этот же плагин есть в комплекте с админкой к LS 2.0
Можно пару слов как в нем параметры задавать (#order, #page)?
Условия для полей нужно писать без решетки (#), она используется только для служебных параметров.
можно включить в конфиге логирование SQL запросов и посмотреть результирующий запрос
Подсчет происходит в методе:
public function EventShutdown()
Переопределить можно и посчитать как тебя надо.
if (!$this->oUserProfile) {
return;
}
parent::EventShutdown();
$iCountTestTopic=$this->PluginTest_Test_GetCountItemsByFilter(array('#where'=>array('user_id = ?d' => array($this->oUserProfile->getId()))),'Post');
$iCountCreated = (int)$this->Viewer_GetSmartyObject()->getTemplateVars('iCountCreated');
$this->Viewer_Assign('iCountCreated',$iCountCreated+$iCountTestTopic);
}
В последнем варианте вроде как все разрулил, но сыплются ошибки при попытке вывести информацию. Всю голову уже сломал. :)
При попытке вывести записи, ошибка: Fatal error: Call to a member function getUser() on a non-object
В файле шаблона убираю в цикле вывод данных записи (юзер, текст, дата) и потставляю набор символов, чтоб проверить работает ли что-нибудь. В итоге пагинация появляется и количество страниц в ней правильное (записей в базе 11, записей на страницу — 2, соответственно и выводятся 6 страниц), но на каждой странице выводится по пять раз подставленный набор символов, хотя, по идее, должен по два раза + на последней один раз.
На сколько могу судить у меня не вытягиваются необходимые данные (юзер, текст, дата) + что-то не так с выводом. Но найти проблемное место так и не получается. Все делал по аналогии с выводом всех новых материалов в ActionIndex.class.php.
В Stream.class.php видел, что добавление нового типа события для плагинов заложено, но что с этим делать, вопрос.
В итоге: при добавлении записей в таблицу активности записи добавляются, но на странице активности они не выводятся. Смотрел логи БД — запрос возвращает количество строк равное общему количеству строк в таблице. Подозреваю, что проблема может быть в этом месте:
но не уверен и не пойму, как проверить.
Можно, кстати, немного пояснить данную строчку? Testimonials — вот это и это: 'unique'=>true.
Да, и я правильно понимаю, что здесь: GetTestimonialsItemsByArrayId, Testimonials — это название сущности, а ByArrayId пишем потому, как имена столбцов в БД без префиксов?
unique — указывает, что событие уникальное (дважды не записывать).
Да. Верно.