mFilter + ms3Remains
Своего типа фильтра в пакете нет. Каталог и mFilter читают сумму остатков из проекции msProductData.stock. Включите ms3remains_sync_product_stock (по умолчанию включена) и при необходимости нажмите Перестроить в настройках проекции.
Документация mFilter для MiniShop3: интеграция MiniShop3.
Примеры JSON и JS: контракт mFilter и MiniShop3, не этого пакета. Сверяйте их с документацией этих компонентов.
Фильтр «только в наличии»
В наборе фильтров добавьте числовой фильтр по полю Data.stock с нижней границей 1.
{
"stock": {
"type": "number",
"source": "resource",
"field": "Data.stock",
"label": "Наличие"
}
}В форме (или через JS) задайте минимум 1. Пустой максимум оставляет верхнюю границу открытой.
Булев фильтр
Тот же эффект без ползунка:
{
"instock": {
"type": "boolean",
"source": "custom",
"label": "В наличии",
"condition": "Data.stock > 0"
}
}Условие опирается на проекцию ms3Remains (stock), не на Data.count.
Кнопка «Только в наличии»
Вне формы: через внешние фильтры и JS API. Ключ должен совпадать с ключом в наборе.
Числовой фильтр stock:
<button type="button" data-in-stock>Только в наличии</button>document.querySelector('[data-in-stock]')?.addEventListener('click', () => {
mfilterGet().setFilter('stock', { min: 1, max: '' });
});Булев фильтр instock:
document.querySelector('[data-in-stock]')?.addEventListener('click', () => {
mfilterGet().setFilter('instock', 1);
});Неотслеживаемые товары
Товар без сохранённых строк в ms3remains_remains обычная проекция не обнуляет. Если в карточке stock уже больше нуля, фильтр «в наличии» его показывает. Кнопка Перестроить при включённом ms3remains_sync_product_stock пишет таким товарам 0. Сохранённый ноль в выборку stock > 0 не попадает.
После массового импорта или смены опций пересоберите проекцию: Проекция остатков.
Карточки MiniShop3 после AJAX
После подмены списка mFilter снова вызовите frontend MiniShop3:
document.addEventListener('mfilter:contentLoaded', function () {
window.ms3?.refresh?.();
});Подробнее: Frontend JavaScript MiniShop3.
Что не делает компонент
Собственный тип фильтра mFilter не поставляется. Счётчики опций по комбинациям остатков компонент не переписывает. Для точного остатка комбинации на карточке товара используйте сниппет ms3Remains с &return=`options`.
