simpleFilters

Простая фильтрация ресурсов MODX3 и товаров MiniShop3
Автор дополнения
Павел Р.
Пакетов
5
Закачек
21
Обычно отвечает в течение 2 часов
Автор дополнения
Пакетов
5
Закачек
21
Обычно отвечает в течение 2 часов
Версия 1.2.0-pl
Дата выпуска 12.03.2026
Загрузки 3
Просмотры 551
Внимание, этот компонент требует PHP 8.0 или выше!
Внимание, этот компонент требует MODX 3 или выше.

Основные свойства


  • Поддержка полей ресурсов, TV и MIGX полей, а также полей и опций товаров MiniShop3.
  • Четыре типа фильтров: чекбокс, радиокнопка, выпадающий список, слайдер для числовых значений (на основе noUiSlider).
  • Настройка псевдонимов фильтров в URL.
  • Поддерживает как прямые запросы, так и индексацию полей и значений в отдельной таблице и выборке из нее.
  • Пагинация (постраничная и кнопкой «Загрузить ещё»).
  • Настраиваемая сортировка и выбор количества на страницу.
  • Работает в логике AND и OR (настраивается).
  • Системные события для тонкой настройки (тексты фильтров, значения, сортировка полей и т. д.).
  • Для работы не требуется jQuery.

Установка

Пакет устанавливается стандартным образом через установщик MODX3.

Системные настройки


  • sf_index_templates — шаблоны ресурсов, поля которых нужно индексировать (ID через зяпятую)
  • sf_index_fields — поля ресурсов, которые нужно индексировать
  • sf_css_path — путь к JS-файлу, по умолчанию {assets_url}components/simplefilters/js/web/default.min.js
  • sf_css_path — путь к CSS-файлу, по умолчанию {assets_url}components/simplefilters/css/web/default.min.css

Начало работы

По умолчанию компонент работает с индексной таблицей modx_sf_index, в которой содержатся значения полей и их значений для ресурсов.

Для добавления данных нужно прописать шаблоны ресурсов, участвующих в фильтрации в системной настройке sf_index_templates и указать поля для индексации в системной настройке sf_index_fields.

Используйте следующие префиксы:
  • Поле ресурса — без префикса
  • TV-параметр — tv_
  • MIGX-поле — migx_
  • Поле товара MiniShop3 — ms_
  • Опция товара MiniShop3 — mso_

То есть если требуется фильтровать товары MiniShop по родителю, цене, производителю, новинкам, хитам и материалам (опция товара), то в sf_index_fields пропишите:
parent,ms_price,ms_vendor_id,ms_new,ms_popular,mso_material

Для MIGX-полей формат следующий: migx_[имя tv]_[название параметра]:[поле названия]|[поле значения] (подробнее смотрите ниже).

Далее можно либо запустить через консоль следующий скрипт:…
<?php
$sf = $modx->getService('Simplefilters');
$sf->updateIndexAll();

… либо вызвать на любой странице сайта сниппет simpleFiltersUpdate, который идет в комплекте.

Этот же сниппет можно использовать для индексации по расписанию посредством CronManager или Scheduler. Просто добавьте сниппет в задание и настройте периодичность запуска.

При сохранении ресурса в админке индексация производится через плагин simpleFilters.

Сниппет simpleFilters

Выводит список ресурсов, фильтры, подключает все необходимые скрипты и стили.

Параметры (в скобках — значение по умолчанию):
  • parents — родители для выборки (текущий ресурс)
  • resources — ресурсы для выборки.
  • templates — шаблоны ресурсов через запятую
  • fromIndex — Режим работы с индексной таблицей (1)
  • showUnpublished — вывод неопубликованных ресурсов (0)
  • where — первоначальная выборка в JSON-формате
  • sortby — поле для сортировки (menuindex)
  • sortdir — направление сортировки (ASC)
  • limit — кол-во на страницу (10)
  • includeTVs — TV-поля через запятую для включения в вывод
  • tvPrefix — префикс для TV-полей (tv_)
  • msPrefix — префикс для полей товара miniShop3 (ms_)
  • msoPrefix — префикс для опций товара miniShop3 (mso_)
  • hideOne — скрывать фильтры с одним значением (1)
  • checkEmpty — просчитывать результат для каждого значения фильтра, чтобы отключать неактивные (0)
  • filters — список фильтров в формате поле1: тип_поля1, поле2: тип_поля2, поле3: тип_поля3
  • aliases — Псевдонимы фильтров для URL в формате поле1==псевдоним1, поле2==псевдоним2, поле3==псевдоним3
  • fseparator — разделитель значений фильтра в адресной строке (_)
  • mode — режим работы: and — совпадение всех условий, or — совпадение хотя бы одного уcловия (or)
В параметре &filters используйте следующие префиксы:
  • Поле ресурса — без префикса
  • TV-параметр — tv_
  • MIGX-поле — migx_
  • Поле товара MiniShop3 — ms_
  • Опция товара MiniShop3 — mso_
Для типов:
  • Чекбокс — checkbox или оставить пустым
  • Выпадающий список — select
  • Слайдер — slider
  • Радиокнопка — radio

Пример указания списка фильтров и псевдонимов:
...
&filters=`
    parent:select,
    ms_vendor_id:select,
    ms_price:slider,
    tv_instock:slider,
    migx_chars_Высота:slider:title|value,
    ms_color,
    ms_tags:select
`
&aliases=`
    parent==category,
    ms_vendor_id==brand,
    ms_price==price,
    tv_instock==instock,
    migx_chars_Высота==height,
    ms_color==color,
    ms_tags==tags
`...

MIGX-поля указываются в формате:

migx_[имя tv]_[название параметра]:[тип фильтра]:[поле названия]|[поле значения]

Допустим есть MIGX-TV chars с такой конфигурацией:

[{ "fields":[
  { "field":"title", "caption":"Параметр" },
  { "field":"value", "caption":"Значение" }
]
}]

У товаров значения указываются следующим образом:



Чтобы создать фильтр-слайдер для параметра «Высота» нужно прописать:

migx_chars_Высота:slider:title|value

Чекбоксы для параметра «Назначение» так:

migx_chars_Назначение:title|value


&where поддерживает один параметр/значение.
Работает только к таблицами ресурса и продукта MiniShop3 (поля указываются без префиксов, как в базе).

Вывод новинок:
&where=`{ "new":"1" }`

Вывод товаров с ценой больше 2000:
&where=`{ "price:>":"2000" }`

Вывод ресурсов со словом «скидка» в longtitle:
&where=`{ "longtitle:like":"скидка" }`

Шаблоны

В чанках по умолчанию используется Fenom (требуется наличие pdoTools), но поддерживается и стандартный синтаксис


  • tpl — чанк вывода ресурса
  • tplWrapper — чанк-обертка всего вывода (sf_wrapper)
  • tplPaginationWrapper — чанк-обертка пагинации (sf_pagination)
  • tplPagination — чанк вывода ссылки на страницу (sf_page)
  • tplPaginationFirst — чанк вывода ссылки на первую страницу (sf_page_first)
  • tplPaginationLast — чанк вывода ссылки на последнюю страницу (sf_page_last)
  • tplMoreButton — чанк вывода кнопки «Загрузить ещё» (sf_morebutton)
  • tplFilter — чанк блока фильтра (sf_filter)
  • tplFilterRow — чанк строки фильтра типа чекбокс (sf_filter_row)
  • tplFilterRadioRow — чанк строки фильтра типа радиокнопка (sf_filter_radio_row)
  • tplFilterSelect — чанк блока фильтра типа селект (sf_filter_select)
  • tplFilterSelectRow — чанк опции фильтра типа селект (sf_filter_option_row)
  • tplFilterSlider — чанк блока выбранного фильтра (sf_selected_filter)
  • tplSelectedRow — чанк строки выбранного фильтра (sf_selected_row)

Компонент поддерживает кастомные чанки для разных фильтров.

Для этого нужно указать параметры в виде &tplFilter_параметр и &tplFilterRow_параметр.
Например, если требуется для фильтра по тегам (ms_tags) какое-то своё оформление, создайте соответствующие чанки и укажите в вызове:
&tplFilter_ms_tags=`чанк_для_блока`
&tplFilterRow_ms_tags=`чанк_для_элемента`

Названия блоков фильтров задаются через лексиконы в формате sf_filter_фильтр (также можно менять в плагине, см. далее).

JavaScript

Для отправки данных формы можно использовать метод:
sf.submit();

После обновления данных срабатывает событие sfilters:
document.addEventListener('sfilters', (e) => {
    //console.log(e);
};

Системные события

Все события принимают массив $data.
  • sfOnGetIds — вызывается после первоначального сбора ID выводимых ресурсов. Можно добавить ресурс, прописав его ID или полностью переписать набор.
  • sfOnGetFilterValues — вызывается после создания значений фильтра. Принимает массив со значениями (например, можно отсортировать по-своему), названием и типом фильтра.
  • sfOnBeforeCreateFilterRow — вызывается при создании строки (элемента фильтра). Можно заменить названия, значения и т. д.
  • sfOnBeforeCreateFilter — вызывается при создании блока фильтра. Например, можно изменить название блока, значения для слайдера и т. д.
  • sfOnCheckResource — вызывается при проверке ресурса на соответствие значению выбранного фильтра. Приходит id ресурса, название фильтра и значение. Чтобы ресурс добавился в выборку должно возвращать $data['result'] = true;

Примеры обработки событий можно посмотреть в файле core/components/simplefilters/docs/pluginExamples.md.

simpleFilters

1.2.0

Основные изменения:

  • Добавилась возможность индексации полей ресурсов и ускоренной выборки.
  • Добавилась возможность настроки алиасов для полей в адресной строке.

Подробнее:

  • Добавилась таблица индекса modx_sf_index
  • Добавились системные настройки sf_index_templates и sf_index_fields для указания шаблонов ресурсов и полей индексации
  • В плагин simpleFilters добавлено событие onDocFormSave для индексирования ресурса при сохранении
  • Добавился сниппет simpleFiltersUpdate для обновления индекса по расписанию (запуск через cronManager или Scheduler)
  • В сниппете добавился параметр &fromIndex для включения режима выборки из индекса. По умолчанию включен.
  • В сниппете добавился параметр &aliases для назначения псевдонимов параметрам в URI
  • Улучшена JS-обработка слайдеров (из запроса исключаются неактивные параметры)

1.1.0

В сниппете добавлены параметры:

  • resources - вывод указанных ресурсов
  • showUnpublished - вывод неопубликованных ресурсов (0)
  • hideOne - скрывать фильтр с одним значением (1)
  • checkEmpty - просчитывать результат для каждого значения фильтра (0)
  • tplSelected - чанк оформления блока с выбранными фильтрами
  • tplSelectedRow - чанк оформления строки выбранного фильтра

Добавлены плейсхолдеры

  • disabled - в сроке фильтра для вывода disabled в случае отсутствия результата по значению фильтра (checkEmpty должен быть включен)
  • selected_filters - вывод выбранных фильтров в &tplWrapper

JS

  • Добавлено JS-событие, срабатывающее после обновления данных document.addEventListener('sfilters', (e) => { };

Дополнительно

  • Улучшена выборка в режиме AND
  • Добавлена обработка TV типа "автометка" (резделитель запятая)

1.0.4

  • Добавлена возможность фильтрации по MIGX-полям
  • Исправлена ошибка в выводе полей типа select
  • Добавлен чанк кнопки «Загрузить ещё»

1.0.3

  • Добавлена возможность пагинации по кнопке «Загрузить ещё»
  • По умолчанию включен режим OR
  • Оптимизация логики

1.0.2

  • Исправлен баг с установкой пустых чанков

1.0.1

  • Добавлена защита пакета

1.0.0

  • Первая редакция

Последние обсуждения в сообществе MODX.pro