Алексей Яковлев

Алексей Яковлев

С нами с 19 апреля 2013; Место в рейтинге пользователей: #334
Максим Кузнецов
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}