Как сделать условие WHERE по опции товара в mfilter2 minishop2 MODx


При использовании mFilter2 в MODX с miniShop2 иногда необходимо сразу отсеять товары по определённой опции товара (option_offer1, color, size и т.д.), не предлагая пользователю выбирать фильтр, а жёстко зафиксировать выбор на уровне SQL.
Например, нужно вывести только товары с опцией option_offer1 = "Распродажа", исключив остальные товары до работы фильтров.
⚙️ Почему нельзя просто указать filters
mFilter2 не фильтрует опции через &filters напрямую без участия пользователя, так как опции хранятся в отдельной таблице msProductOption.
Для фильтрации по опциям необходимо использовать:
&leftJoinдля подключения таблицы опций к выборке&whereдля задания условий фильтрации.
🚀 Готовое решение
1️⃣ Основной вызов mFilter2
[ [!mFilter2?
&element=`msProducts`
&parents=`2`
&depth=`4`
&limit=`12`
&tpl=`tpl.msProducts.row`
&leftJoin=`{
"ProductOption": {
"class": "msProductOption",
"on": "ProductOption.product_id = msProduct.id AND ProductOption.key = 'option_offer1'"
}
}`
&where=`{
"ProductOption.value": "Распродажа"
}`
&includeTVs=`1`
&includeContent=`1`
] ]
2️⃣ Разбор
- &element=`msProducts` – базовый сниппет, который используется mFilter2.
- &leftJoin – подключаем таблицу
msProductOptionпоproduct_id, фильтруем только по ключу опцииoption_offer1. - &where – указываем фильтр по значению опции (
"Распродажа"). - Работает на уровне SQL, не грузит лишние товары в фильтрацию mFilter2.
- Совместимо с пагинацией и ajax в mFilter2.
🖥️ Использование на Fenom
Для проектов на Fenom можно записать так:
{ $_mfilter2 = '!mFilter2' | snippet : [
'element' => 'msProducts',
'parents' => '2',
'depth' => '4',
'limit' => '12',
'tpl' => 'tpl.msProducts.row',
'leftJoin' => '{
"ProductOption": {
"class": "msProductOption",
"on": "ProductOption.product_id = msProduct.id AND ProductOption.key = \'option_offer1\'"
}
}',
'where' => '{
"ProductOption.value": "Распродажа"
}',
'includeTVs' => '1',
'includeContent' => '1',
'showLog' => '0'
] }
{ $._mfilter2 }
🪄 Частые кейсы применения
- Вывод только распродажных товаров с тегом
Распродажав опциях. - Вывод товаров с определённым размером, цветом, типом материала, зафиксированным в опции.
- Разделение товаров по типу без дублирования категорий в дереве MODX.

Напишите нам в WhatsApp



