Skip to content
ms3Remains
Остатки товаров MiniShop3 по комбинациям опций
  • MODX 3
  • PHP 8.2
  • miniShop3
  • Vue 3
  1. Компоненты
  2. ms3Remains
  3. Интеграции
  4. mFilter

mFilter + ms3Remains

Своего типа фильтра в пакете нет. Каталог и mFilter читают сумму остатков из проекции msProductData.stock. Включите ms3remains_sync_product_stock (по умолчанию включена) и при необходимости нажмите Перестроить в настройках проекции.

Документация mFilter для MiniShop3: интеграция MiniShop3.

Фильтр «только в наличии»

В наборе фильтров добавьте числовой фильтр по полю Data.stock с нижней границей 1.

json
{
    "stock": {
        "type": "number",
        "source": "resource",
        "field": "Data.stock",
        "label": "Наличие"
    }
}

В форме (или через JS) задайте минимум 1. Пустой максимум оставляет верхнюю границу открытой.

Булев фильтр

Тот же эффект без ползунка:

json
{
    "instock": {
        "type": "boolean",
        "source": "custom",
        "label": "В наличии",
        "condition": "Data.stock > 0"
    }
}

Условие опирается на проекцию ms3Remains (stock), не на Data.count.

Кнопка «Только в наличии»

Вне формы — через внешние фильтры и JS API. Ключ должен совпадать с ключом в наборе.

Числовой фильтр stock:

html
<button type="button" data-in-stock>Только в наличии</button>
js
document.querySelector('[data-in-stock]')?.addEventListener('click', () => {
  mfilterGet().setFilter('stock', { min: 1, max: '' });
});

Булев фильтр instock:

js
document.querySelector('[data-in-stock]')?.addEventListener('click', () => {
  mfilterGet().setFilter('instock', 1);
});

Неотслеживаемые товары

Товар без сохранённых строк в ms3remains_remains в проекцию не попадает. В выдаче «в наличии» его не будет, пока вы не сохраните остаток на вкладке (хотя бы 0 для «нет в наличии» или положительное число).

После массового импорта или смены опций пересоберите проекцию: Проекция остатков.

Карточки MiniShop3 после AJAX

После подмены списка mFilter снова вызовите frontend MiniShop3:

js
document.addEventListener('mfilter:contentLoaded', function () {
  window.ms3?.refresh?.();
});

Подробнее: Frontend JavaScript MiniShop3.

Что не делает компонент

Собственный тип фильтра mFilter с переписыванием счётчиков опций по комбинациям остатков не поставляется. Для точного остатка комбинации на карточке товара используйте сниппет ms3Remains с &return=options``.