simpleFilters - простая фильтрация для MODX3

Всем привет!

Пока мы ждём нового mFilter для MODX3 (который обещает быть ого-го), предлагаю вниманию уважаемого сообщества более простое решение здесь и сейчас ).

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


  • Поддержка полей ресурсов, а также полей и опций товаров MiniShop3.
  • Четыре типа фильтров: чекбокс, радиокнопка, выпадающий список, слайдер для числовых значений (на основе noUiSlider).
  • Пагинация.
  • Настраиваемая сортировка и выбор количества на страницу.
  • Системные события для тонкой настройки (тексты фильтров, заголовки блоков, значения, сортировка полей и т. д.).
  • Для работы не требуется jQuery.
Демо на 1 000 товаров здесь.

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

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

  • 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

Сниппет simpleFilters

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

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

...
&filters=`ms_vendor_id:select,ms_price:slider,tv_instock:slider,ms_color,ms_tags:select`
...

&where поддерживает один параметр/значение.
Работает только к таблицами ресурса MODX и продукта 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)
  • tplFilter — чанк блока фильтра (sf_filter)
  • tplFilterRow — чанк строки фильтра типа чекбокс (sf_filter_row)
  • tplFilterRadioRow — чанк строки фильтра типа радиокнопка (sf_filter_radio_row)
  • tplFilterSelect — чанк блока фильтра типа селект (sf_filter_select)
  • tplFilterSelectRow — чанк опции фильтра типа селект (sf_filter_option_row)
  • tplFilterSlider — чанк блока фильтра типа слайдер (sf_filter_slider)
Компонент поддерживает кастомные чанки для разных фильтров.

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

&tplFilter_ms_tags=`чанк_для_блока`
&tplFilterRow_ms_tags=`чанк_для_элемента`

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

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

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

Павел Романов
3 часа назад
modx.pro
1
83
+4

Комментарии: 4

Александр
3 часа назад
0
Кроме обычной пагинации предусмотрена ли загрузка «по кнопке»?
    Павел Романов
    3 часа назад
    0
    В данный момент нет, но в ближайшее время планирую добавить.
    Также в планах работа с MIGX-параметрами, но это позже.
    Артур Шевченко
    2 часа назад
    0
    Как будто бы 2 секунды на фильтрацию 1000 товаров без единой твшки это многовато.
      Павел Романов
      2 часа назад
      0
      Новинки, Акции, Хиты, Цена и Цвет — поля товара miniShop3.
      На складе — TV-шка.
      Материал — опция категории (ms3_product_option).

      Компонент потому и «simple», что не претендует на суперскорость.
      Для >1000 товаров в категории или большого кол-ва фильтров нужно использовать другие решения.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4