
simpleFilters
Простая фильтрация ресурсов MODX3 и товаров MiniShop3.
Основные свойства
- Поддержка полей ресурсов, TV и MIGX полей, а также полей и опций товаров MiniShop3.
- Работает как со стандартными таблицами MODX, так и с собственной индексной таблицей.
- Кеширование.
- Поддерживает логику AND и OR.
- Типы фильтров: чекбокс, радиокнопка, выпадающий список, слайдер для числовых значений (на основе noUiSlider).
- Настройка псевдонимов фильтров в URL.
- Поддержка SEO-страниц с ЧПУ и настраиваемыми TITLE, DESCRIPTION, H1 Breadcrumbs и content.
- Пагинация (постраничная и кнопкой «Загрузить ещё»).
- Настраиваемая сортировка и выбор количества на страницу.
- Системные события для тонкой настройки (тексты фильтров, значения, сортировка полей, SEO-страницы и т. д.).
Внимание
После перехода на версию 1.5.0 обязательно обновите индекс и пересоздайте SEO-страницы на вкладке Обслуживание в приложении simpleFilters.
Системные настройки
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
| sf_index_templates | Шаблоны ресурсов, поля которых нужно индексировать | |
| sf_index_fields | Поля ресурсов, которые нужно индексировать | |
| sf_js_path | Путь к JS-файлу относительно корня сайта | {assets_url}components/simplefilters/js/web/default.min.js |
| sf_css_path | Путь к CSS-файлу относительно корня сайта | {assets_url}components/simplefilters/css/web/default.min.css |
| sf_seopages_aliases | Алиасы фильтров для формирования SEO-страниц (должны соответствовать псевдонимам в параметре aliases сниппета simpleFilters) в JSON:{"ms_vendor_id":"brand", "ms_color":"color"} | |
| sf_seopages_ids | ID страниц для SEO-ссылок (отдельные страницы). Укажите через запятую ID страниц с вызовом сниппета simpleFilters, на которых используются SEO-ссылки | |
| sf_seopages_tpls | ID шаблонов страниц для SEO-ссылок (например, категории). Укажите через запятую ID шаблонов, где вызывается сниппет simpleFilters и на которых используются SEO-ссылки |
Начало работы
Индексирование полей и значений
Полный функционал компонента доступен при наличии значений в таблице modx_sf_index. Это ускоряет выборку и реализует механизм SEO-страниц.
Для добавления данных в индекс нужно заполнить системные настройки sf_index_templates и sf_index_fields, где указать шаблоны ресурсов, участвующих в фильтрации и поля которые нужно индексировать, соответственно.
Используются следующие префиксы:
- Поле ресурса — без префикса
- TV-параметр — tv_
- MIGX-поле — migx_
- Поле товара MiniShop3 — ms_
- Опция товара MiniShop3 — mso_
Например, у нас установлен MiniShop3, шаблоны товаров 4 и 5 и нам нужно фильтровать по:
- цене (поле товара price)
- производителю (поле товара vendor_id)
- новинке (поле товара new)
- цвету (поле товара color)
- материалу (опция товара material)
- остатку (tv-параметр instock)
- полю «Высота» из MIGX-TV *chars, у которого названия параметров указаны в поле
title, а значения вvalue
В sf_index_templates указываем 4,5, а в sf_index_fields так:
ms_price,ms_vendor_id,ms_new,ms_color,mso_material,tv_instock,migx_chars_Высота:title|valueДалее откройте приложение simpleFilters и запустите индексацию, нажав на кнопку "Обновить индекс" на вкладке "Обслуживание".
Индексация при сохранении ресурса
Происходит автоматически посредством плагина simpleFilters (висит на событии onDocFormSave).
Индексация по расписанию
Можно использовать CronManager или Scheduler.
Просто добавьте сниппет sfUpdateIndex в задание и настройте периодичность запуска.
Индексация после импорта
Если используете Impex3, создайте плагин на событие OnImpexAterAllImport с вышеуказанным скриптом:
switch ($modx->event->name){
case 'OnImpexAterAllImport':
$sf = $modx->getService('Simplefilters');
foreach($ids as $id){
$sf->updateIndex($id, 0);
}
break;
}Если используете штатный импорт MiniShop3 из CSV, сделайте общее индексирование на msOnAfterImport:
switch ($modx->event->name){
case 'msOnAfterImport':
$sf = $modx->getService('Simplefilters');
$sf->updateIndexAll();
break;
}Работа без индекса
Если ресурсов или полей немного или нет возможности обновлять индекс (по расписанию, после импорта и т. д), режим работы можно переключить на стандартные запросы к таблицам ресурсов, TV-параметров и т. д.
Для этого в вызове сниппета нужно указать &fromIndex=`0`
JavaScript
Для отправки формы можно использовать метод sf.submit:
sf.submit();После обновления данных срабатывает событие sfilters:
document.addEventListener('sfilters', (e) => {
// console.log(e);
});