3490
47.81
49.86
за сайт
- Проверено Modstore
- Бесплатные будущие обновления
- Работа на тестовом и публичном домене
- 12 месяцев тех. поддержки
Внимание, этот компонент требует PHP
8.1
или выше!
Внимание, этот компонент требует MODX 3 или выше.


Возможности
- Фасетная фильтрация — фильтрация по любым полям ресурсов, TV, опциям MiniShop3
- SEO URL — человекочитаемые URL вида /catalog/brand_apple/color_black/
- Кросс-фильтрация — подсчёт доступных значений с учётом активных фильтров
- AJAX — обновление результатов без перезагрузки страницы
- Headless API — REST API для интеграции с Vue, React, Svelte
- SEO оптимизация — динамические title, description, H1, canonical
- Словоформы — склонение названий фильтров в SEO-текстах
- Интеграция — работает с MiniShop3, mSearch, pdoTools
- Vue-интерфейс — современная админ-панель на Vue 3 + PrimeVue
Системные требования
- MODX Revolution | 3.0.0+
- PHP | 8.1+
- MySQL | 5.7+ / MariaDB 10.3+
Зависимости
- pdoTools 3.x — для работы сниппетов и шаблонизатора Fenom
- VueTools — для административного интерфейса
- MiniShop3 (опционально) — для фильтрации товаров
Быстрый старт
Добро пожаловать в документацию — docs.modx.pro/components/mfilter/quick-start
1.4.4-beta1
Новые возможности
- Новый тип фильтра
ms3_categories— «Категории товаров (MS3)». Аналогparents, но заточен под MiniShop3: рабочее множество ограничиваетсяclass_key = msProduct, дополнительно учитываются вторичные категории черезmsCategoryMember. Используйте этот тип на MS3-каталогах вместоparents. Тип появляется в выпадашке админки только когда MS3 установлен.
Исправления
- Системные настройки mFilter без названий в админке MODX. В лексиконе был только один
setting_*ключ (tv_index_on_save), остальные 21 настройка показывались с raw-ключом (mfilter.url_separator) в колонке «Название» вместо человекочитаемого заголовка. Добавлены парыsetting_+setting__descдля всех 22 настроек и 10area_mfilter.*для группировки в разделы. Описания в_descобъясняют практический смысл настройки, а не просто переводят название. - Унаследованный баг группировки OR в
ParentsFilterType::buildQuery. На MS3-каталогах с использованием вторичных категорий (msCategoryMember) условиеOR:modResource.id:INсобиралось плоским массивом, и xPDO эмитилWHERE base AND parent IN(...) OR id IN(...). Из-за приоритета AND/OR secondary IDs обходили scope раздела,published=1,deleted=0и любые другие одновременно активные фильтры — в выборке могли появляться непубликованные товары или товары из других разделов. При переезде логики вMS3CategoriesFilterTypeOR обёрнут в[[...]]— xPDO теперь корректно группирует:WHERE base AND (parent IN OR id IN). - Фантомная «категория-дедушка» в фильтре по категориям на MS3-каталогах. При вызове
mFilterFormбез главного сниппетаmFilterплейсхолдерmfilter.baseIdsне выставлен, иmFilterFormиспользует fallback черезFilter::getResourceIds(). На MS3-сайтах в выборку попадали ресурсы сclass_key = msCategoryиisfolder = 0(пустые подкатегории, отображающиеся в дереве как обычные документы).ParentsFilterTypeчитал у нихmodResource.parent, и в фильтре появлялся «дедушка» — родитель этой пустой категории. Решение через новый типms3_categories: он отсекает msCategory из baseIds на этапе сбора категорий. Issue surfaced on dev.fastfoodmenu.ru. -
Значения фильтров с двойными кавычками были полностью сломаны. Касалось любых значений вида
Штрих-М "Лайт",Apple "Magic" Mouseи т. п. — типичные модели техники с кавычками в названиях. Симптомы каскадные:- Корень бага (HTML). Чанки
mfilter.item.tpl,mfilter.boolean.tpl,mfilter.color.tpl,mfilter.selected.item.tplвыводили значения сырыми:value="{$value}". Браузер обрывал атрибут на внутренней", иinput.valueоказывался обрезанным до первой кавычки ("Штрих-М "). Из-за этогоFormDataотправлял на API обрезанную строку — фильтрация по таким значениям физически не работала, возвращая 0 товаров. - JS поверх битого HTML. В
FilterUI.updateSuggestionCount/syncFormWithStateиSelectedFilters.removeFilterиспользовалсяquerySelector('[value="..."]')с прямой подстановкой значения из бекенда. Полная (не обрезанная) строка с кавычкой делала CSS-селектор невалидным,querySelectorбросалSyntaxError, и цикл обновления значений всего фильтра прерывался на первом таком элементе — в UI только одно значение показывало корректный count, все остальные сбрасывались в 0 и становились disabled.
Исправление:
- Серверная часть (корень): добавлен
|escко всем user-suppliedvalue/label/valueLabelв перечисленных чанках.|escв pdoTools =htmlspecialcharsс экранированием"→"плюс защита MODX-тегов. HTML теперь валидный,input.valueсодержит полное значение, фильтрация работает. - Клиентская часть (defense-in-depth): новые хелперы
FilterUI.findInputByValue/findOptionByValueсравниваютelement.value === targetв JS вместо CSS-селектора — безопасно для любых строк. Применены в трёх точках вызова (updateSuggestionCount,syncFormWithState,SelectedFilters.removeFilter). updateSuggestionsоборачивает каждый per-item update в try/catch, ограничивая blast radius любой будущей регрессии в DOM-лукапе.
Issue surfaced on dev.fastfoodmenu.ru.
- Корень бага (HTML). Чанки
Архитектура
ParentsFilterTypeстал class-agnostic. Вся MS3-специфика (services->has('ms3'),msCategoryMemberдля вторичных категорий) вынесена в новыйMS3CategoriesFilterType. Чистое разделение:parentsработает с любым MODX-каталогом,ms3_categories— только с MiniShop3.
Миграция
- Действие требуется на MS3-сайтах, где фильтр категорий привязан к типу
parents: в админке mFilter откройте свой FilterSet, у фильтра категорий смените тип с «Родители (категории)» на «Категории товаров (MS3)». Иначе вторичные категорииmsCategoryMemberи отсечка msCategory перестанут работать (старыйparentsбольше их не делает).



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