Напишите нам в WhatsApp
+7(906) 943-40-17
Сохраните этот номер в контактах и вы сможете написать нам в WhatsApp.
Или оставьте номер и мы сами напишем вам в WhatsApp
Условиями о персональных данных
Кнопка закрыть
Спасибо!
Спасибо, что оставили заявку.
Мы обработаем вашу заявку и обязательно позвоним!
Кнопка закрыть
Форма заявки
Оставьте ваши контакты,
мы обязательно с вами свяжемся
Ваше имя
Номер телефона (Перезвоним Вам)
Комментарий
Отправляя форму вы соглашаетесь с политикой конфиденциальности
пн-вс с 9:00 до 21:00
Почта: hello@redbe.ru
Уже есть сайт?
Сделаем бесплатный аудит с точки зрения маркетинга и SEO

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

Как сделать условие 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.

🩻