При использовании торговых предложений в Битриксе при разработке каталога возникает логичный вопрос: как отсортировать/отфильтровать товары с торговыми предложениями по наличии и по цене? Из-за того, что для таких товаров цена и наличие записывается не у товаров, а у предложений, скрытие из листингов товаров с нулевым остатком приводит к исчезновению из листинга товаров с торговыми предложениями.
Пока разработчики битрикса не добавили такие возможности в ядро(но они обещают доработать этот функционал), используем свой код для реализации этих функций.
Наличие на складе
Для сортировки и фильтрации по наличию используем стандартное поле модуля catalog QUANTITY(CATALOG_QUANTITY), при изменении наличия торговых предложений находим остальные предложения у товара и обновляем его доступное количество:
После этого мы может товар с торговыми предложениями наравне с обычными товарами сортировать или фильтровать по полям CATALOG_QUANTITY и CATALOG_AVAILABLE, а также использовать параметр HIDE_NOT_AVAILABLE компонента bitrix:catalog или bitrix:catalog.section:
Скрыть отсутствующие товары:
Отсортировать по популярности, но показать сначала товары в наличии, затем отсутствующие:
Отсортировать по наличию:
Для сортировки и фильтрации по цене товаров используем свойство MINIMUM_PRICE, в нём уже из коробки записывается минимальная цена среди торговых предложений. Если у всех торговых предложений одинаковая цена, можно воспользоваться облегчённым вариантом, который при изменении цены товара/торгового предложения обновляет свойство PRICE у товара(свойство нужно создать самому):
Для сортировки по цене, например, по убыванию указываем параметры bitrix:catalog или bitrix:catalog.section:
В кусках кода используются константы CATALOG_IBLOCK_ID и OFFERS_IBLOCK_ID, их нужно объявить или заменить на ID соответственно инфоблока товаров и товарных предложений.
Я не претендую на уникальность или безупречность приведенных решений, код представлен как есть.
До сих пор в ядре CMS 1C-Битрикс не добавлена возможность сортировки по наличию товара на складе, т.е. не по количеству, а по наличию — факту того если ли товар на складе или он отсутствует. Пока на просьбу клиента, чтобы при любой сортировке выдачи каталога товаров те товары, которых нет на складе были в конце списка приходится решать с помощью нижепредставленного велосипеда. 1. Нужно создать свойство в информационном блоке, где должна быть такая фильтрация — IS_AVAILABLE . Это свойство можно сделать просто символьного типа. Оно у нас будет принимать всего 2 значения: 0 — если товара нет на складе, 1- если товар есть на складе.
2. Нужно сделать так, чтобы при заведении нового товара или обновлении старого товара свойство IS_AVAILABLE автоматически обновлялось. Этого можно добиться, добавив такой код в файл /bitrix/php_interface/init.php (либо в файл /bitrix/php_interface/Ваш_идентификатор_сайта/init.php при использовании многосайтовости) .
3. Нужно добавить сортировку в компонент bitrix:catalog.section и поставить ее первой. Сортировка должна быть по PROPERTY_IS_AVAILABLE , направление DESC.
4. Если у вас уже есть записанные товары и вы не хотите их пересохранять вручную, чтобы свойство перезаписалось, то нужно запустить примерно такой скрипт:
В этом скрипте вам нужно заменить в $arFilter = Array(«IBLOCK_ID»=>1); идентификатор инфоблока, на тот, который должен быть у вас.
После этого у вас должна заработать эта сортировка.
- Интернет-магазины
- Аспро: Next
- Аспро: Интернет-магазин
- Аспро: Крутой шоп
- Аспро: Маркет
- Аспро: Оптимус
- Аспро: Шины и диски 2.0
- Аспро: Шины и диски, интернет-магазин
Как настроить сортировку так, чтобы отсутствующие товары были всегда в конце списка?
Инструкция
В публичной части сайта перейдите в каталог, активируйте режим правки и нажмите всплывающую кнопку с шестеренкой. Войдите в режим редактирования параметров компонента.
В режиме редактирования переключитесь на пункт «Настройки списка» и установите значения для полей, как показано на скриншоте.
- По какому полю сортируем товары в разделе – другое
- Поле — CATALOG_QUANTITY
- Порядок сортировки товаров в разделе – по убыванию.
В административной части сайта перейдите в Рабочий стол → Настройки → Настройки продукта → Настройки модулей → Торговый каталог. Найдите группу настроек «Значения параметров товаров по умолчанию» и нажмите кнопку «Изменить».
В открывшемся окне настроек активируйте параметр «Включить количественный учет» и уберите галочку в поле «Разрешить покупку при отсутствии товара».
Для товаров, которые нужно сортировать таким образом, должны быть правильно установлены параметры сортировки.
Чтобы проверить эти настройки, в публичной или административной части сайта войдите в режим редактирования карточки товара. Переключитесь на вкладку «Торговый каталог».
Переключись на подвкладку «Параметры» и в группе полей «Параметры» проверьте, чтобы значения отмеченных полей соответствовали значениям на скриншоте:
- Включить количественный учет – по умолчанию (да)
- Разрешить покупку при остуствии товара (включая разрешение отрицательного количества товара) – по умолчанию (нет)
- Разрешить подписку при отсутствии товара – по умолчанию (да).
Перейдите в Рабочий стол → Настройки → Настройки продукта → Настройки модулей → Торговый каталог. В группе полей «Карточка товара» уберите галочку в поле «Показывать вкладку Торговый каталог для товаров, имеющих торговые предложения». Сохраните изменения.
Итог: отсутствующие на складах товары выводятся в конце списка независимо от того, как выполняется сортировка – по цене или алфавиту.