Два шаблона тикетов
День добрый сообщество, возникла такая ситуация.
Есть два разных вызова сниппета TicketForm, необходимо что бы при создание тикета в первом вызове применялся Шаблон тикет 1, во втором вызове применялся Шаблон тикет 2.
Подскажите пожалуйста как такое реализовать?
Заранее благодарен!
Есть два разных вызова сниппета TicketForm, необходимо что бы при создание тикета в первом вызове применялся Шаблон тикет 1, во втором вызове применялся Шаблон тикет 2.
Подскажите пожалуйста как такое реализовать?
Комментарии: 9
Мне вот тоже интересно, потому как в вызове двух TicketForm на странице (с разными полями и логикой их заполнения), в одной есть WYSIWYG-редактор, а во второй, для аналогичной textarea, не появляется. Дело, видимо, в том, что id=«ticket-editor» у них одинаковый, и применяется он лишь один раз. Но как бы это обойти, или чтобы шаблон с полями формы менялся в зависимости от выбранной секции в списке с id=«ticket-sections»…
Дело в том, что по логике html атрибут id считается уникальным. Исходя из этого, например, поиск значений через айди будет быстрее, чем через классы:
В твоем случае решение очень простое — подключай визуальный редактор через идентификатор класса.
//первое условие выполнится быстрее, т.к. после первого нахождения подходящего элемента, скрипт прекратит работу
$("#id").css("display", "block");
//а эта функция будет искать до конца html-разметки
$(".class").css("display", "block);
В твоем случае решение очень простое — подключай визуальный редактор через идентификатор класса.
Вариант 1 (менее надежный — пользователь может отредактировать значение через консоль браузера):
Вариант 2 (через плагин):
//также нужно указать параметр template в списке допустимых и обязательных полей (в настройках сниппета TicketForm)
<input type="hidden" name="template" value="айди_шаблона" />
Вариант 2 (через плагин):
<?php
if ($modx->event->name == 'OnDocFormSave' && $mode == 'new') {
if (любым условием при помощи входящих POST-данных фильтруешь нужную форму ) {
$resource->set('template', 'айди_шаблона');
$resource->save();
}
}
Спасибо, но, увы, не догоняю. Временно решил вопрос, сделав отдельные две страницы с разными формами. Но хотелось бы, конечно, разжеванных инструкций «для чайников», если, конечно, не затруднит.
Вот у меня два шаблона для разных вызовов TicketForm. «Шаблон1», если пишем в «секция1» и «шаблон2», если в «секция2». И страница для публикации. Где:
Вариант «красивый» — это общий вызов TicketForm, но, выбирая секцию из списка, прописанном в вызове (&resources=`секция1, секция2`), у меня на страницу сразу подгружается соответствующий шаблон с полями и правилами их заполнения.
Вариант «норм» — это два вызова с разными шаблонами. Но тут идентичные поля путаются между собой, и может дело не только в id.
Вроде бы предложенный плагин — из серии «красивого», но как его применить, где и как вызывать?
Вот у меня два шаблона для разных вызовов TicketForm. «Шаблон1», если пишем в «секция1» и «шаблон2», если в «секция2». И страница для публикации. Где:
Вариант «красивый» — это общий вызов TicketForm, но, выбирая секцию из списка, прописанном в вызове (&resources=`секция1, секция2`), у меня на страницу сразу подгружается соответствующий шаблон с полями и правилами их заполнения.
Вариант «норм» — это два вызова с разными шаблонами. Но тут идентичные поля путаются между собой, и может дело не только в id.
Вроде бы предложенный плагин — из серии «красивого», но как его применить, где и как вызывать?
Конкретно для вашей задачи, из серии «красивого», я бы сделал так (используется fenom):
1.На нужной странице (допустим, «Управление товарами») ставим селектор секций:
Чанк section.option.item:
2. На событие переключения селектора пишем скрипт, выставляющий в адресную строку соответствующий гет-параметр:
Что мы имеем: селектор, который при переключении прописывает в адресную строку гет-параметр вида
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}
Спасибо, попробую, вроде оно!
Все вроде понятно по логике работы, и про феном я наслышан, но у меня похоже из-за каких-то незакрытых скобок в скриптах счетчиков он-то и не работает. Возможен ли финт ушами? Допустим, в селекторе делаю вызов pdoResources обычным образом, указывая конкретные resources секций. Вроде, в таком случае достаточным будет шаблон:
<option value="[[+id]]" selected>[[+pagetitle]]</option>
Я так понял, что скрипт должен сработать, но вот со сниппетом подстановки форм, он ведь тоже на fenom, как быть? Использовать всякие фильтры ввода вывода? Как тогда брать $category_id и прописывать для него условия?
Не, так и скрипт не работает.
Заключите код счетчиков (и весь внешний код скриптов) в тег
К слову, fenom, при наличие ошибок, логгирует их в журнал ошибок modx'a.
{ignore}{/ignore}
К слову, fenom, при наличие ошибок, логгирует их в журнал ошибок modx'a.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.