Редирект на определённый id после опубликования тикета
Добра и Здравия!
Необходимо сделать так, чтобы после опубликования тикета перекидывало не на страницу тикета, а на определёную страницу. Возможно ли сделать такое через плагины MODx?
В TicketForm есть параметр "redirectUnpublished", к сожалению мне он не подходит, потому что нужно, чтобы по публикации тикета приходило уведомление о том, что на сайте опубликован тикет, а если они добавляются неопубликованными, то уведомления не приходит.
Как оказалось, достаточно плагином ставить у ресурса 2 поля:
Необходимо сделать так, чтобы после опубликования тикета перекидывало не на страницу тикета, а на определёную страницу. Возможно ли сделать такое через плагины MODx?
В TicketForm есть параметр "redirectUnpublished", к сожалению мне он не подходит, потому что нужно, чтобы по публикации тикета приходило уведомление о том, что на сайте опубликован тикет, а если они добавляются неопубликованными, то уведомления не приходит.
Как оказалось, достаточно плагином ставить у ресурса 2 поля:
<?php
/* Плагин для Tickets, который назначает свойство тикета "published" для определённого родителя всегда TRUE. Он помогает решить задачу, когда нужно при добавлении тикета отослать уведомление админу + в то же время перенаправить пользователя на страницу в параметре &redirectUnpublished */
$parent = '8'; // родитель, в который всегда добавлять опубликованные тикеты (даже если мы нажимаем на кнопку "В черновик") и слать о них уведомления
switch($modx->event->name) {
case 'OnDocFormSave':
if($modx->context->key != 'mgr' && $mode == 'new' && $resource->class_key == "Ticket" && $resource->get('parent') == 8) {
$resource->set('published', true);
$resource->set('publishedon', $resource->get('createdon') );
$resource->save();
}
break;
}
Комментарии: 18
Парни, кто в курсе, направьте на путь истинный, а?
Есть один простой как доска способ.
Делаем свой js скрипт для работы с Tickets. Чтобы не изобретать велосипед и сделать максимально быстро — копируем стандартный assets/components/tickets/js/web/default.js
В настройках системы Tickets ->tickets.frontend_js прописываем свой скрипт
В скрипте дописываем функционал редиректа в Tickets.ticket.save после получения ответа от сервера об успешном результате.
Надеюсь подход к решению задачи понятен. С комментами все точно так же и там же.
Делаем свой js скрипт для работы с Tickets. Чтобы не изобретать велосипед и сделать максимально быстро — копируем стандартный assets/components/tickets/js/web/default.js
В настройках системы Tickets ->tickets.frontend_js прописываем свой скрипт
В скрипте дописываем функционал редиректа в Tickets.ticket.save после получения ответа от сервера об успешном результате.
Надеюсь подход к решению задачи понятен. С комментами все точно так же и там же.
Скажите пожалуйста, можно ли как-нибудь вызвать в плагине функцию "sendTicketMails()" из tickets.class.php?
Так нет ничего проще, подключай класс и вызывай метод.
$Tickets = $modx->getService('tickets','Tickets',$modx->getOption('tickets.core_path',null,$modx->getOption('core_path').'components/tickets/').'model/tickets/',$scriptProperties);
$Tickets->sendTicketMails($resource->toArray());
Спасибо большущее, друг!!! Тока я опять с проблемой)) К сожалению не шлёт он всё-же, по идее должен слать, но не шлёт. Вот код плагина, если есть такая возможность — помоги пожалуйста:
switch($modx->event->name) {
case 'OnDocFormSave':
if($mode == 'new' && $resource->class_key == "Ticket") {
$resource->set('published', true);
$resource->save();
$Tickets = $modx->getService('tickets','Tickets',$modx->getOption('tickets.core_path',null,$modx->getOption('core_path').'components/tickets/').'model/tickets/',$scriptProperties);
$Tickets->sendTicketMails($resource->toArray()); // шлём мыло
}
break;
}
Насколько я понял, ты любой новый тикет публикуешь. А не проще будет поправить форму в чанке tpl.Tickets.form.create — просто удалить кнопку В черновики и оставить Опубликовать? Тогда тикет всегда опубликуется и уведомление о нем отошлется указанным в настройках администраторам.
Да, однако меня не перекинет на страницу с «успешной отправкой заявки». :) Решение нашлось, спасибо, друг, за помощь!!!
Хм, до меня дошло, ты имеешь ввиду даже из админки я публикую тикет, не смотря на то, что там к примеру стоит галочка «не опубликован»?)
Нужно сделать проверку контекста, наверно, да?
Нужно сделать проверку контекста, наверно, да?
Это решается добавлением условия $modx->context->key != 'mgr'.
Я имел ввиду, что в плагине нет редиректа, только публикация тикета. Поэтому и вопрос — зачем нужно это делать в плагине, если можно поменять форму?
Я имел ввиду, что в плагине нет редиректа, только публикация тикета. Поэтому и вопрос — зачем нужно это делать в плагине, если можно поменять форму?
Как оказалось, редиректит сам компонент, когда узнаёт, что у нас тикет со свойством «Опубликован». :) И письмо шлёт он же. Поэтому даже не приходилось класс подключать в плагин. Я когда его подключил, то слалось 2 письма. :)
Получается, ты решал задачу А, а решил задачу Б.
Т.е. задача изменилась с
Т.е. задача изменилась с
чтобы после опубликования тикета перекидывало не на страницу тикета, а на определёную страницу.на
есть родитель, в котором всегда публиковать неопубликованные тикеты и слать с них уведомленияА народ-то и не знал.
Да, помоему я немножко запутал народ. Извиняюсь. :)
Добавил описание к плагину, чтобы попытаться распутать запутанный народ. :)
Плагин для Tickets, который назначает свойство тикета «published» для определённого родителя всегда TRUE. Он помогает решить задачу, когда нужно при добавлении тикета отослать уведомление админу + в то же время перенаправить пользователя на страницу в параметре &redirectUnpublished
Добавил описание к плагину, чтобы попытаться распутать запутанный народ. :)
Плагин для Tickets, который назначает свойство тикета «published» для определённого родителя всегда TRUE. Он помогает решить задачу, когда нужно при добавлении тикета отослать уведомление админу + в то же время перенаправить пользователя на страницу в параметре &redirectUnpublished
Т.е. как бы немножечко обманываешь пользователя: он сохраняет тикет в черновик не подозревая, что ты сразу публикуешь его черновик.
И всё ради того, чтобы показать «Спасибо, вы опубликовали тикет!»
По моему, правильнее штатно публиковать тикеты и сделать плагин на создание документа.
1. Проверить класс Ticket и $mode == 'new'
2. Установить $_SESSION['redirectTo'] = 'любой адрес'.
3. При открытии юзером любой страницы проверять этот флаг. Если есть — редиректить на адрес и убирать его из сессии, чтобы срабатывал только один раз.
Таким образом, юзер сразу после публикации пытается перейти на свой тикет, а попадает на указанную в плагине страницу.
Это лучше отражает логику поставленной задачи, чем скрытая публикация черновиков.
По моему, правильнее штатно публиковать тикеты и сделать плагин на создание документа.
1. Проверить класс Ticket и $mode == 'new'
2. Установить $_SESSION['redirectTo'] = 'любой адрес'.
3. При открытии юзером любой страницы проверять этот флаг. Если есть — редиректить на адрес и убирать его из сессии, чтобы срабатывал только один раз.
Таким образом, юзер сразу после публикации пытается перейти на свой тикет, а попадает на указанную в плагине страницу.
Это лучше отражает логику поставленной задачи, чем скрытая публикация черновиков.
+100. Быстрое и легкое решение.
У меня мысль потекла в сторону расширения класса Tickets и изменения метода SaveTicket() с учетом нового параметра redirectTo сниппета TicketForm.
У меня мысль потекла в сторону расширения класса Tickets и изменения метода SaveTicket() с учетом нового параметра redirectTo сниппета TicketForm.
Спасибо! Теперь немножко грамотней сделал. :)
<?php
switch($modx->event->name) {
case 'OnDocFormSave':
if($modx->context->key != 'mgr' && $mode == 'new' && $resource->class_key == "Ticket") {
$parent = '8'; // родитель, в котором всегда публиковать неопубликованные тикеты и слать с них уведомления
if( $resource->get('parent') == $parent ) {
$resource->set('published', true);
$resource->set('publishedon', $resource->get('createdon') );
$resource->save();
}
}
break;
}
В данном примере можно 2 if объединить в один для краткости.
if($modx->context->key != 'mgr' && $mode == 'new' && $resource->class_key == "Ticket" && $resource->get('parent') == 8)
Всем большое спасибо за помощь!!!
Как оказалось, достаточно плагином ставить у ресурса 2 поля:
Как оказалось, достаточно плагином ставить у ресурса 2 поля:
<?php
switch($modx->event->name) {
case 'OnDocFormSave':
if($mode == 'new' && $resource->class_key == "Ticket") {
$resource->set('published', true);
$resource->set('publishedon', $resource->get('createdon') );
$resource->save();
}
break;
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.