Максим Кузнецов

Максим Кузнецов

Был в сети 04 августа 2021, 21:51
Заказы принимаю
Так… первое: когда у вас не работает что-то с js-скиптами, крайне рекомендуется открыть консоль браузера (f12 в хроме) и посмотреть наличие ошибок.

В вашем случае:
— у вас не работает функция tooltip
— у вас 2 формы #mse2_filters (со всеми вложенными фильтрами). Так делать нельзя, потому что id — параметр, значение которого должно быть уникальным в рамках одной страницы.
Это забавно..) Вы считаете, что оскорбив сообщество (которое, к слову, состоит не только из программистов), вы уязвили его самолюбие, но при этом не замечаете то, что причина вашей обиды в том, что вам никто не помог? Так чье же самолюбие уязвилось?

Что же до вашего вопроса… Если
это он, то даже опустив придирки о том, что вопроса там, в общем-то, нет, там, к тому же, крайне мало информации о вашей проблеме как таковой.
Где вы хотите вывести ваш checkbox — в ресурсах, виджетах, отдельной странице? Открою для вас секрет — все советы и помощь в этом сообществе мало того, что как правило бескорыстны, так еще и (сюрприз) — отнимают время. И тратить его на тех, кто не в силах даже сформулировать вопрос, порой излишняя роскошь.
Вы никогда не задавались вопросом — с чему вам вообще кто-то должен помогать?

К слову, вы так и не ответили на мой вопрос.
1. Подключается любая библиотека для работы с куками (например)
2. В js создается событие на изменение всех или только нужных вам фильтров, в котором будет запоминаться их состояние, примерно таким образом:

$(document).on('change', '.filter-class', function(e) {
	//В примере все состояния фильтров хранятся в одной переменной куков 'filters_condition' в json-формате
	var filters_condition = $.cookie('filters_condition');
			
	//Смотрим, существует ли она уже, чтобы не затирать другие значения
	if (typeof filters_condition !== 'undefined' && filters_condition !== null) {
		var params = filters_condition != "" ? $.parseJSON(filters_condition) : {};
	}
	else {
		var params = {};
	}
	
	var filter_condition;
			
	if ($(this).is(':checked')) {
		filter_condition = 'checked';
	}
	else {
		filter_condition = 'not_checked';
	}

	//Уникальный атрибут, по которому будет находиться фильтр, в моем случае - name
	//Если есть риск существования одинаковых значений инпутов/селекторов в разных формах, то можно переназначить на id
	params[$(this).attr('name')] = current_condition;
		
	$.cookie('filters_condition', JSON.stringify(params));
});

3. В чанках, отображающие фильтры в mFilter2 перехватываем нужные данные в куках, после чего выставляем результат:

{var $filters_condition = $.cookie['filters_condition'] | fromJSON}

//$filter_key - переменная чанка mFilter2, содержащая name фильтра
{var $filter_condition = $filters_condition[$filter_key]}

//...
//В нужном месте инпута/селектора выводим состояние:
{$filter_condition == 'checked' ? 'checked' : ''}

Пример демонстрационный, для наибольшей наглядности. То же состояние $filters_condition в шаблоне лучше единожды распарсить из JSON-a, после чего записывать в плейсхолдер, чтобы в последствии данные дергать уже из него.
При желании — можно, но зачем?

Особенность fenom-a такова (помимо
преимуществ шаблонизации), что он отрабатывает только 1 раз, тогда как родной парсер MODX-a может пробегаться по шаблонам до 10 раз.

Совмещая родные теги и теги MODX-a, вы лишь создаете дополнительную нагрузку.

UPD: советую особенно внимательно посмотреть раздел синтаксиса из ссылки выше, это позволит закрыть многие вопросы.
Отчасти причина в удобстве переопределения — если вы укажете дефолтное значение тв-поля, а затем переназначите на другое, то системе не придется пробегаться по всем ресурсам и искать заполненность старым значением для последующей замены.
MIGX хранит данные в json-формате.

То есть по-умолчанию вы сразу достаете все данные, поэтому для реализации пагинации у вас есть 2 способа: визуально прятать часть результатов (внутри цикла foreach, например), отображая нужный промежуток в зависимости от get-параметра или с помощью jQuery при помощи display block/none.