Два шаблона тикетов

День добрый сообщество, возникла такая ситуация.
Есть два разных вызова сниппета TicketForm, необходимо что бы при создание тикета в первом вызове применялся Шаблон тикет 1, во втором вызове применялся Шаблон тикет 2.
Подскажите пожалуйста как такое реализовать?
Заранее благодарен!
Дмитрий Середюк
23 ноября 2015, 12:18
modx.pro
1
1 833
0

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

Алексей Яковлев
04 августа 2016, 23:55
0
Мне вот тоже интересно, потому как в вызове двух TicketForm на странице (с разными полями и логикой их заполнения), в одной есть WYSIWYG-редактор, а во второй, для аналогичной textarea, не появляется. Дело, видимо, в том, что id=«ticket-editor» у них одинаковый, и применяется он лишь один раз. Но как бы это обойти, или чтобы шаблон с полями формы менялся в зависимости от выбранной секции в списке с id=«ticket-sections»…
    Максим Кузнецов
    05 августа 2016, 00:51
    0
    Дело в том, что по логике html атрибут id считается уникальным. Исходя из этого, например, поиск значений через айди будет быстрее, чем через классы:
    //первое условие выполнится быстрее, т.к. после первого нахождения подходящего элемента, скрипт прекратит работу
    $("#id").css("display", "block");
    //а эта функция будет искать до конца html-разметки
    $(".class").css("display", "block);

    В твоем случае решение очень простое — подключай визуальный редактор через идентификатор класса.
    Максим Кузнецов
    05 августа 2016, 00:48
    1
    0
    Вариант 1 (менее надежный — пользователь может отредактировать значение через консоль браузера):
    //также нужно указать параметр template в списке допустимых и обязательных полей (в настройках сниппета TicketForm)
    <input type="hidden" name="template" value="айди_шаблона" />

    Вариант 2 (через плагин):
    <?php
    	if ($modx->event->name == 'OnDocFormSave' && $mode == 'new') {
    		if (любым условием при помощи входящих POST-данных фильтруешь нужную форму ) {
    			$resource->set('template', 'айди_шаблона');
    			$resource->save();
    		}
    	}
      Алексей Яковлев
      05 августа 2016, 01:19
      0
      Спасибо, но, увы, не догоняю. Временно решил вопрос, сделав отдельные две страницы с разными формами. Но хотелось бы, конечно, разжеванных инструкций «для чайников», если, конечно, не затруднит.
      Вот у меня два шаблона для разных вызовов TicketForm. «Шаблон1», если пишем в «секция1» и «шаблон2», если в «секция2». И страница для публикации. Где:
      Вариант «красивый» — это общий вызов TicketForm, но, выбирая секцию из списка, прописанном в вызове (&resources=`секция1, секция2`), у меня на страницу сразу подгружается соответствующий шаблон с полями и правилами их заполнения.
      Вариант «норм» — это два вызова с разными шаблонами. Но тут идентичные поля путаются между собой, и может дело не только в id.
      Вроде бы предложенный плагин — из серии «красивого», но как его применить, где и как вызывать?
        Максим Кузнецов
        05 августа 2016, 02:11
        1
        +2
        Конкретно для вашей задачи, из серии «красивого», я бы сделал так (используется fenom):

        1.На нужной странице (допустим, «Управление товарами») ставим селектор секций:
        <select class="changeGet" data-key="category">
        	<option value="" disabled selected>Выберите тип товара</option>
        	<!--Сниппет для вызова подходящих секций-->
        	{$_modx->runSnippet('!pdoResources', [
        		'depth' => 1,
        		'parents' => айди_контейнера_с_секциями,
        		'limit' => 0,
        		'tpl' => 'section.option.item'
        	])}
        </select>

        Чанк section.option.item:
        <option value="{$id}" {if $id == $.get.category} selected{/if}>{$pagetitle}</option>

        2. На событие переключения селектора пишем скрипт, выставляющий в адресную строку соответствующий гет-параметр:
        <script type="text/javascript">
        	function changeGet (param, value) {
        		var currentURL = window.location.href+'&';
        		var change = new RegExp('('+param+')=(.*)&', 'g');
        		var newURL = currentURL.replace(change, '$1='+value+'&');
        
        		if (getURLParameter(param) !== null) {
        			try {
        				window.history.replaceState('', '', newURL.slice(0, - 1) );
        			}
        			catch (e) {
        				console.log(e);
        			}
        		}
        		else {
        			var currURL = window.location.href;
        			
        			if (currURL.indexOf("?") !== -1){
        				window.history.replaceState('', '', currentURL.slice(0, - 1) + '&' + param + '=' + value);
        			}
        			else {
        				window.history.replaceState('', '', currentURL.slice(0, - 1) + '?' + param + '=' + value);
        			}
        		}
        	}
        
        	$('.changeGet').on('change', function () {
        		changeGet($(this).attr("data-key"), $(this).val());
        		
        		location.reload();
        	});
        </script>

        Что мы имеем: селектор, который при переключении прописывает в адресную строку гет-параметр вида
        ?category=айди_выбранной_категории
        и перезагружает страницу. Нам осталось только перехватывать значение этого гет-параметра и в зависимости от него выставлять соответствующую форму:

        {var $category_id = $.get.category}
        
        {if $category_id|length > 0}
        	{switch $category_id}
        		<!--Параметры сниппета TicketForm для категории с id = 1-->
        		{case 1}
        			{var $params = '
        				&allowFiles=`1` 
        				&requiredFields=`pagetitle,content` 
        				&allowedFields=`pagetitle,introtext,content`
        				&tplFormCreate=`category1.form.create`
        				&tplFormUpdate=`category1.form..update`
        			'}
        		
        		<!--Параметры сниппета TicketForm для категории с id = 2-->
        		{case 2}
        			{var $params = '
        				&allowFiles=`0` 
        				&requiredFields=`pagetitle` 
        				&allowedFields=`pagetitle,content`
        				&tplFormCreate=`category2.form.create`
        				&tplFormUpdate=`category2.form..update`
        			'}
        	{/switch}
        	
        	{if $params|length > 0}
        		[[!ticketform? {$params}]]
        	{else}
        		Указана некорректная категория.
        	{/if}
        {else}
        	Выберите категорию.
        	<!--Здесь можно прописать общий вызов TicketForm, если категория не указана-->
        {/if}
      Алексей Яковлев
      05 августа 2016, 18:00
      0
      Все вроде понятно по логике работы, и про феном я наслышан, но у меня похоже из-за каких-то незакрытых скобок в скриптах счетчиков он-то и не работает. Возможен ли финт ушами? Допустим, в селекторе делаю вызов pdoResources обычным образом, указывая конкретные resources секций. Вроде, в таком случае достаточным будет шаблон:
      <option value="[[+id]]" selected>[[+pagetitle]]</option>
      Я так понял, что скрипт должен сработать, но вот со сниппетом подстановки форм, он ведь тоже на fenom, как быть? Использовать всякие фильтры ввода вывода? Как тогда брать $category_id и прописывать для него условия?
        Алексей Яковлев
        05 августа 2016, 18:11
        0
        Не, так и скрипт не работает.
          Максим Кузнецов
          05 августа 2016, 19:03
          0
          Заключите код счетчиков (и весь внешний код скриптов) в тег
          {ignore}{/ignore}

          К слову, fenom, при наличие ошибок, логгирует их в журнал ошибок modx'a.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          9