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