Редирект на определённый id после опубликования тикета

Добра и Здравия!

Необходимо сделать так, чтобы после опубликования тикета перекидывало не на страницу тикета, а на определёную страницу. Возможно ли сделать такое через плагины 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;
	
}
Пашок
12 февраля 2015, 06:55
modx.pro
1
1 952
0

Комментарии: 18

Пашок
Пашок
12 февраля 2015, 15:53
0
Парни, кто в курсе, направьте на путь истинный, а?
    Temp Name
    12 февраля 2015, 16:46
    0
    Есть один простой как доска способ.
    Делаем свой js скрипт для работы с Tickets. Чтобы не изобретать велосипед и сделать максимально быстро — копируем стандартный assets/components/tickets/js/web/default.js
    В настройках системы Tickets ->tickets.frontend_js прописываем свой скрипт

    В скрипте дописываем функционал редиректа в Tickets.ticket.save после получения ответа от сервера об успешном результате.

    Надеюсь подход к решению задачи понятен. С комментами все точно так же и там же.
    Пашок
    Пашок
    12 февраля 2015, 16:41
    0
    Скажите пожалуйста, можно ли как-нибудь вызвать в плагине функцию "sendTicketMails()" из tickets.class.php?
      Сергей Шлоков
      12 февраля 2015, 19:56
      0
      Так нет ничего проще, подключай класс и вызывай метод.
      $Tickets = $modx->getService('tickets','Tickets',$modx->getOption('tickets.core_path',null,$modx->getOption('core_path').'components/tickets/').'model/tickets/',$scriptProperties);
      $Tickets->sendTicketMails($resource->toArray());
        Пашок
        Пашок
        13 февраля 2015, 09:25
        0
        Спасибо большущее, друг!!! Тока я опять с проблемой)) К сожалению не шлёт он всё-же, по идее должен слать, но не шлёт. Вот код плагина, если есть такая возможность — помоги пожалуйста:
        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;
        	
        }
          Сергей Шлоков
          13 февраля 2015, 09:38
          0
          Насколько я понял, ты любой новый тикет публикуешь. А не проще будет поправить форму в чанке tpl.Tickets.form.create — просто удалить кнопку В черновики и оставить Опубликовать? Тогда тикет всегда опубликуется и уведомление о нем отошлется указанным в настройках администраторам.
            Пашок
            Пашок
            13 февраля 2015, 09:41
            0
            Да, однако меня не перекинет на страницу с «успешной отправкой заявки». :) Решение нашлось, спасибо, друг, за помощь!!!
              Пашок
              Пашок
              13 февраля 2015, 09:42
              0
              Хм, до меня дошло, ты имеешь ввиду даже из админки я публикую тикет, не смотря на то, что там к примеру стоит галочка «не опубликован»?)

              Нужно сделать проверку контекста, наверно, да?
                Сергей Шлоков
                13 февраля 2015, 09:49
                0
                Это решается добавлением условия $modx->context->key != 'mgr'.
                Я имел ввиду, что в плагине нет редиректа, только публикация тикета. Поэтому и вопрос — зачем нужно это делать в плагине, если можно поменять форму?
                  Пашок
                  Пашок
                  13 февраля 2015, 09:55
                  0
                  Как оказалось, редиректит сам компонент, когда узнаёт, что у нас тикет со свойством «Опубликован». :) И письмо шлёт он же. Поэтому даже не приходилось класс подключать в плагин. Я когда его подключил, то слалось 2 письма. :)
                    Сергей Шлоков
                    13 февраля 2015, 13:29
                    0
                    Получается, ты решал задачу А, а решил задачу Б.
                    Т.е. задача изменилась с
                    чтобы после опубликования тикета перекидывало не на страницу тикета, а на определёную страницу.
                    на
                    есть родитель, в котором всегда публиковать неопубликованные тикеты и слать с них уведомления
                    А народ-то и не знал.
                      Пашок
                      Пашок
                      13 февраля 2015, 14:13
                      0
                      Да, помоему я немножко запутал народ. Извиняюсь. :)

                      Добавил описание к плагину, чтобы попытаться распутать запутанный народ. :)

                      Плагин для Tickets, который назначает свойство тикета «published» для определённого родителя всегда TRUE. Он помогает решить задачу, когда нужно при добавлении тикета отослать уведомление админу + в то же время перенаправить пользователя на страницу в параметре &redirectUnpublished
                        Сергей Шлоков
                        13 февраля 2015, 14:20
                        +1
                        Т.е. как бы немножечко обманываешь пользователя: он сохраняет тикет в черновик не подозревая, что ты сразу публикуешь его черновик.
                          Василий Наумкин
                          13 февраля 2015, 15:53
                          +1
                          И всё ради того, чтобы показать «Спасибо, вы опубликовали тикет!»

                          По моему, правильнее штатно публиковать тикеты и сделать плагин на создание документа.
                          1. Проверить класс Ticket и $mode == 'new'
                          2. Установить $_SESSION['redirectTo'] = 'любой адрес'.
                          3. При открытии юзером любой страницы проверять этот флаг. Если есть — редиректить на адрес и убирать его из сессии, чтобы срабатывал только один раз.

                          Таким образом, юзер сразу после публикации пытается перейти на свой тикет, а попадает на указанную в плагине страницу.
                          Это лучше отражает логику поставленной задачи, чем скрытая публикация черновиков.
                          Сергей Шлоков
                          13 февраля 2015, 16:12
                          +1
                          +100. Быстрое и легкое решение.
                          У меня мысль потекла в сторону расширения класса Tickets и изменения метода SaveTicket() с учетом нового параметра redirectTo сниппета TicketForm.
              Пашок
              Пашок
              13 февраля 2015, 09:53
              0
              Спасибо! Теперь немножко грамотней сделал. :)

              <?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;
              	
              }
                Сергей Шлоков
                13 февраля 2015, 13:31
                0
                В данном примере можно 2 if объединить в один для краткости.
                if($modx->context->key != 'mgr' && $mode == 'new' && $resource->class_key == "Ticket" && $resource->get('parent') == 8)
        Пашок
        Пашок
        13 февраля 2015, 09:37
        1
        0
        Всем большое спасибо за помощь!!!

        Как оказалось, достаточно плагином ставить у ресурса 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;
        	
        }
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          18