mFilter2 и пункт "Все"
Здравствуйте!
Подскажите, как добавить к фильтру типа радио пункт «Все». Видел доку docs.modx.pro/components/msearch2/extension/components/msearch2/the-extension/example-of-filtering-products, но не соображу, что прописать в моем случае.
Подскажите, как добавить к фильтру типа радио пункт «Все». Видел доку docs.modx.pro/components/msearch2/extension/components/msearch2/the-extension/example-of-filtering-products, но не соображу, что прописать в моем случае.
Комментарии: 8
Можно же с помощью js, вроде как костыль, но решить можно
Указываем для нужного фильтра outer-чанк, в котором до плейсхолдера {$rows} дописываем:
Суть: поскольку используется radio-инпут, достаточно передавать в value пустое значение, чтобы сбросить гет-параметр.
Пример реализации.
<label for="mse2_resource|{$название поля}_all" class="">
<input type="radio" name="{$название алиаса поля}" id="mse2_resource|{$название поля}_all" value=""{$.get.название_гет_параметра | length == 0 ? 'checked' : ''} /> Все
</label>
Суть: поскольку используется radio-инпут, достаточно передавать в value пустое значение, чтобы сбросить гет-параметр.
Пример реализации.
Вот я муйню сморозил :) Я то думаю что нужно все значения передать :)
Просто текст
Если вы используете checkbox + старый mFilter2, я бы посоветовал сделать так:
1. Подключаете любую js-библиотеку, взаимодействующую с get-параметрами или написать свои функции для их получения и изменения. Например, такие:
2. Добавляете в нужном месте кнопку сброса:
1. Подключаете любую js-библиотеку, взаимодействующую с get-параметрами или написать свои функции для их получения и изменения. Например, такие:
function getURLParam(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}
function changeUrlParam(key, value, url) {
if (!url) {
url = window.location.href;
}
var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"), hash;
if (re.test(url)) {
if (typeof value !== 'undefined' && value !== null) {
url = url.replace(re, '$1' + key + "=" + value + '$2$3');
}
else {
hash = url.split('#');
url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
if (typeof hash[1] !== 'undefined' && hash[1] !== null) {
url += '#' + hash[1];
}
}
}
else {
if (typeof value !== 'undefined' && value !== null) {
var separator = url.indexOf('?') !== -1 ? '&' : '?';
hash = url.split('#');
url = hash[0] + separator + key + '=' + value;
if (typeof hash[1] !== 'undefined' && hash[1] !== null) {
url += '#' + hash[1];
}
}
}
if (key && (value == '' || value === null)) {
//Присмотреться за работой - может стоит заменить на более обширную регулярку ([^&;]+?)(&|#|;|$)
var regular = new RegExp('[?|&]' + key + '=');
url = url.replace(regular, "");
}
window.history.replaceState('', '', url);
}
2. Добавляете в нужном месте кнопку сброса:
<a onclick="changeUrlParam('category', ''); mSearch2.submit();">Сбросить поле 'category'</a>
Благодарю вас за ответ! Прошу прощения, оказывается, я использую не радио, а чекбокс)). Просто разработка сайта была остановлена на некоторое время, и я позабыл, что и как.
Подскажите, пожалуйста, как мне переделать под старый mfilter2 ваш код. Я сделал:
Подскажите, пожалуйста, как мне переделать под старый mfilter2 ваш код. Я сделал:
<label for="mse2_[[+table]][[+delimeter]][[+filter]]_all" class="mse2_label all-items">
<input type="checkbox" id="mse2_[[+table]][[+delimeter]][[+filter]]_all" name="[[+filter_key]]" class="check-all" value="" checked /> Все
<span class="checkmark"></span>
</label>
Что мне нужно написать в поле value?
Если речь все еще о radio-кнопке, то примерно так:
Расшифровка:
— суффикс _all нужен исключительно для наглядности, вы можете заменить содержимое for и id на любое другое уникальное для фильтров данной категории значение.
— в name передается название псевдонима фильтра. Если псевдоним отсутствует, указывается значение из filters (resource|parent)
— в value ничего не указывается, он остается пустым (чтобы при нажатии функция mFilter2 сбросила значение требуемого фильтра)
— обработка гет-параметра ($.get.category) нужна для проставления checked-состояния при первой загрузке страницы
//Допустим, мы хотим добавить кнопку для родного поля ресурса parent, указав ему псевдоним category
//'filters' => '
// resource|parent:default
//',
//'aliases' => '
// resource|parent==category
//'
//Код чанка будет следующим:
<label for="mse2_resource|parent_all" class="">
<input type="radio" name="category" id="mse2_resource|parent_all" value=""{$.get.category | length == 0 ? 'checked' : ''} />
<span>Сбросить фильтр category</span>
</label>
Расшифровка:
— суффикс _all нужен исключительно для наглядности, вы можете заменить содержимое for и id на любое другое уникальное для фильтров данной категории значение.
— в name передается название псевдонима фильтра. Если псевдоним отсутствует, указывается значение из filters (resource|parent)
— в value ничего не указывается, он остается пустым (чтобы при нажатии функция mFilter2 сбросила значение требуемого фильтра)
— обработка гет-параметра ($.get.category) нужна для проставления checked-состояния при первой загрузке страницы
Разобрался! Спасибо вам большое!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.