Alex Zhuravlev

Alex Zhuravlev

С нами с 31 мая 2014; Место в рейтинге пользователей: #96
Максим Кузнецов
13 марта 2018, 02:11
2
+5
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, после чего записывать в плейсхолдер, чтобы в последствии данные дергать уже из него.
Alex Zhuravlev
16 октября 2017, 01:40
1
0
Имею конфигурацию
site.com/ru/ и site.com/en/
в HTTP HOST (localizator) прописано site.com/ru/ и site.com/en/

вывожу
{'site_url' | option} или {$_modx->config.site_url}
и получаю site.com/ а должно быть site.com/ru/ или /en/

Посмотрел на примере у Владимира и там тоже самое если перейти на EN и посмотреть ссылку в шапке на логотипе, то она ведет на русский контекст

Как правильно выводить линк на главную страницу того (псевдо) контекста где сейчас находится пользователь а не посылать его на основной по умолчанию web
<a class="site-logo" href="{'site_url' | option}">Site</a>
или
<a class="site-logo" href="{'site_url' | option}{'cultureKey' | option}/">Site</a> 
Василий Наумкин
24 мая 2015, 15:03
4
+2
Сделай сниппет
<?php
echo '<pre>';
print_r($modx->placeholders);
die;
и вызови его на странице после mFilter2 — увидишь все выставленные плейсхолдеры.
Сергей Шлоков
05 сентября 2014, 13:29
5
0
Если так просто, хотелось бы узнать как. Лично у меня не получилось ни на 2.2 ни на 2.3. — не хочет работать этот friendly_urls_strict.
Поэтому решаю эту задачу одним из способов:
1. Выставляю канонический урл
<link rel="canonical" href="[[~[[*id]]]]? &scheme=`full`]]" />
2. Или добавляю в .htaccess код
# Rewrite domain.com -> domain.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://site.ru/$1/ [L,R=301]
Работает гарантировано.