Используя данный функционал, например, можно переместить товары, которых нет в остатках, в конец списка или вовсе не отображать.
[spoiler]
Параметры сортировки доступны в настройках компонентов, отвечающих за вывод списка товаров, например, bitrix:catalog.section:
Как видите, добавлены параметры для сортировки по второму полю.
Разберём ситуацию из жизни: в интернет магазине есть каталог книг, в котором товары выводятся по алфавиту, клиенты делают заказы, и, естественно, товары заканчиваются, но при этом остаются на своих местах в списке.
Включаем сортировку по наличию товара:
Если товара нет в наличии, то отображаться он будет в конце списка, при этом список отсортируется и по алфавиту.
На скриншотах видно, товары, которых нет в наличии, исчезли с первой страницы и отображаются в конце списка.
С обновлением повилась не только сортировка по наличию товара, но и возможность скрывать товары, которых нет, из списка. Для этого используйте опцию “Не отображать товары, которых нет на складе” в настройках компонента. Включаем и смотрим, как изменилось отображение каталога:
На скриншоте видно, у нас осталась только одна страница с товарами, и не показаны те, которых нет.
Стоит отметить, что описанные возможности доступны как при использовании складского учета, так и без.
Данный функционал вышел в обновлении catalog 12.5.4, в настоящее время оно находится в статусе alpha, т.е. доступно только партнёрам.
Если хотя бы на одном из складов будет товар, то он считается доступным?
Ребят вы путаете фильтр, с решением достаточно сложной задачи, цель фильтра убрать со списка товары которых нет в наличии в магазине и не важно где они хранятся или просто сделать двойную фильтрацию.
А вы предлагаете им решать намного более сложную задачу, причем не расписывая как вы предлагаете ее решать.
Вот лично мне как клиенту глубоко пофигу на каких складах у вас там товары, я вижу товар и хочу его купить, а дальше ваши проблемы как вы мне его доставите.
В вашем случае решение должно быть например таким:
Я попал на ваш сайт
Меня по IP определили и перебросили на мой город где есть свои склады
В конце определения уточняют а не ошиблась ли автоматика и я подтверждаю выбор города
Соответственно список товаров я вижу именно нужный.
Оформляю заказ покупаю
И где тут фильтры которые описаны в этой статье?
А как вы видите решение вашей задачи?
Показывать товар
В Наличии 174
- Есть в Магазине
- Амурская
- Дубровка
- Медведково
- Калужская
- Любой
Вы как клиент мыслите не верно, в 70% случаях, клиенты пользуются самовывозом, и им надо здесь и сейчас, а когда у тебя на сайте 5 складов с 500-1000 товарами в одной категории, в ОДНОМ городе, со складами в разных его концах, и между ними большие расстояния и пробки, а все ценят время, и хотят по быстрому приехать в ближайший и купить, то побродив по сайту 10-15 минут, тупо звонят нам в магазин, и выпытывает информацию из менеджеров, в итоге калл центр перегружен, сайт не справляется со своей обязанностью, и простаивает, где логика? фильтр или сортировка по складам обязательно должен быть, или битрикс не для крупного сетевого бизнеса.В следующем думаем о дополнительных возможностях в умном фильтре.
По сути это обычная банальная сортировка по CATALOG_QUANTITY, но в более удобном виде.
Соответственно, и сортировка была через это как-бы-лишнее-свойство.
Это было из-за того, что сортировка CATALOG_QUANTITY в CIblockElement::GetList() не верно отрабатывала.
А сейчас, выходит, все верно?
Подскажите, пожалуйста, работает ли эта сортировка с учетом SKU? Если у одного товара 2 предложения есть в наличии, а 10 предложений этого товара нет в наличии, как отсортирует по отношению к другим товарам?
Господа неужели нельзя делать что то не кусками, а сразу дорабатывать до нормального вида, эти многострадальные SKU постоянно в заднице, раз уж есть заявленный функционал торговых предложений, так будьте добры его поддерживать сразу, а не потом как получится.
Я писал не о том, что сортировка не работает с SKU, а о том, что запланированы работы по приведению SKU к нормальной работе.
И часто с более сложными условиями, например сначала надо вывести товары со значением свойства X равным "CLASS10", потом товары со значением "RED" и потом не равные "GREEN", и в каждой выборке еще случайно перемешать.
Как то так:
$arSort = array(
array('X=CLASS10', 'shuffle'),
array('X=RED', 'shuffle'),
array('X=GREEN', 'shuffle')
);
Делаю сортировку CATALOG_AVAILABLE все товары без цен улетают вниз, отлично. Но в списке остаются товары с CATALOG_QUANTITY = 0
Первая мысль сделать вторичную сортировку по CATALOG_QUANTITY, с первого взгляда отлично, но товары не по названию идут, добавляем сортировку третью по наименованию NAME. И в итоге получаем кашу, так как CATALOG_QUANTITY отсортировал по остаткам, а не по наличию.
В итоге я так и не смог получить сортировку, чтобы нулевые остатки были в конце списка, а в наличии сортировались по наименованию.
Тут опять же напрашивается сортировка с булевым условием "CATALOG_QUANTITY=0".
01/07 вышло, вам интересна думаю данная строчка: Выгрузка полных остатков на складах (даже нулевых) для корректного апдейта наличия на сайте
Забыл написать, что редакция Малый Бизнес
Вот скрин каталога (в скрине карточки товара наверное нет необходимости поскольку товары, которых нет в наличии помечены)
На скрине в области выделенной оранжевым цветом видно, что товары не отсортированы по цене, а в области выделенной красным цветом видны товары, которых нет в наличии.
А это скрин настроек компонента
В техподдержку уже писал, причем по ряду вопросов. Пока решился только один, на днях вышло обновление, - и корректно заработал фильтр товаров с SCU
Были задачи:
- по отображению скидок в каталоге товаров и непосредственно в карточке, а именно, в каталоге не отображаются перечеркнутые цены для товаров с SCU
- не отображаются цены в модуле Просмотренные товары (хотя их отображение включено)
- не отображаются просмотренные товары в расшифровке заказа покупателя (административная панель)
Подчеркну, еще раз, что все товары с SCU
чтобы в 1с поставить
цифру приоритета
и товар выводился в нужном списке
По существу, ваша просьба не возможна из коробки и требует кастомизации обмена.
Я ставлю сортировка по наличию
То как будет выводится товар?
а потом 10 шт
а середине 3000 тыс штук
1я сортировка по индексу сортировки - тут причина понятна - если надо вывести несколько "акционных" товаров на самый верх, спасает индекс сортировки.
2я сортировка стоит стандартная - иногда по популярности, иногда по названию, иногда по дате добавления товара - у каждого магазина тут требования могут немного отличаться, но они всегда есть.
И вот многие магазины просят "у нас много товаров которых нет в наличии - нам надо вывести их так, чтобы они были всегда внизу витрины, при этом чтобы первые две сортировки остались". Возникает вопрос - Как? Ну вот кстати сейчас я тут подумал, даже если ввести трехуровневую сортировку по catalog_quantity это конечно не поможет решить задачу... Если поставить сортировку по наличию на первое место, то остальные сортировки уже не будут иметь смысла, ибо наличие у всех товаров как правило отличается сильно - наличие же не просто булево (есть/нет), а реальное число товаров.
А если поставить сортировку по наличию вниз, то есть после сортировки по дате создания например, то все равно это не поможет решить задачу "отсутствующие товары вывести внизу витрины".
Тут может помочь только такой костыль как создать новое свойство "абстрактное наличие", подписаться на событие ProductUpdate - и если наличие товара больше нуля, то писать в "абстрактное наличие" 1, а если меньше нуля, то 0.
Вот тогда-то и нужна третья сортировка.
1. будет по свойству "абстрактное наличие"
2. по индексу сортировки
3. уже по названию/дате создания и т.д. кому что надо
Короче этот весь рассказ похож на костыль, или какую-то долбанутую идею, но самое интересное тут то, что каждые 2 из 3х наших клиентов повторяют одну и ту же хотелку "сделайте пожалуйста чтобы товары которых нет в наличии выводились внизу витрины после товаров которые есть". Вот хоть убейся...
Если общее количество товара = 0 и при этом запрещено покупать товар с нулевым количеством, то товар будет не доступен к покупке. Клиенты чаще всего этот нюанс не берут во внимание и говорят об общем количестве, но если подумать, то проблему решит любой из вариантов и если "товары недоступные к покупке" и если товары "с нулевым общим количеством" будут внизу списка.
Ну по крайней мере у клиентов которые обращались ко мне с этим вопросом.
Если говорить в целом о логике, то наверное логичнее конечно будет выводить внизу списка именно товары недоступные к покупке?
Вы же не напишете сейчас что "это уже давно можно настроить в битриксе"? ))
Скорее всего добавим параметр в настройки, но только после реализации функционала доступности товаров с торговыми предложениями.
Ведь есть же логика в такой схеме:
Сортируем товары по названию, чтобы было все логично и красиво (1 ключ - NAME)! Но... товары с акцией выводим наверх (2 ключ - SORT), а товары недоступные к покупке чтобы не мешались вниз загоняем (3 ключ)
Мне кажется на большинстве магазинов она такая и будет
Напоминаю, функцию нужно вставить в файл "bitrix\components\bitrix\catalog.section\component.php", в самый конец перед оператором return
За найденный косяк с обнулением большое спасибо. При первой возможности, постараюсь найти причину и поправить
По теме сортировки штатными средствами:
С вашим же методом косяк. Периодически обнуляются остатки у некоторых товаров. Грешил на глюки битрикса, а оказалось во как.
Хотя вот у меня сейчас проект очень интересный - клиент сам у каждого из товаров устанавливает - вести ли количественный учет или нет. Если учет ведется - тут может быть еще вилка: если товара нет на складе, но у него убран запрет на покупку при нулевом значении на складе - значит товар таки можно купить (какие-то у него особые отношения со складами постащиков). Вот такое, конечно, не думаю, что можно сделать только на стороне базы, но! для "нормальной ситуации", когда у товара есть количество и у его торговых предложений есть количество - мне кажется, что триггеры в базе очень даже помогут.
Как быть, если в магазине можно купить то что в наличии, и то что под заказ? И нужно чтобы в каталоге всё что в количестве больше 0 выводилось вперед, но не сортировалось по количеству 'CATALOG_QUANTITY', а сортировалось по второму критерию, например по цене?
Товар под заказ - включен количественный учет, количество меньше либо равно нулю, РАЗРЕШЕНА покупка при отсутствии товара (QUANTITY <= 0, QUANTITY_TRACE = Y, CAN_BUY_ZERO = Y)
0. Версия модуля catalog
1. Для простых товаров или товаров с СКУ
2. Для простых товаров, где AVAILABLE ошибочно - значения AVAILABLE, QUANTITY, QUANTITY_TRACE, CAN_BUY_ZERO
3. Для товаров с СКУ - зависит от версии catalog, но в любом случае - включена ли настройках "показывать вкладку Торговый каталог для товаров с СКУ", те же значения полей (если есть запись в базе), доступны ли предложения.
1. простые товары
2. В таблице b_catalog_product вообще нет поля 'AVAILABLE' -
----
Речь идёт о сортировке, на сайте продаются товары которые не всегда бывают в наличии, задача вывести всё что в наличии вверх, но сохранить сортировку по цене, популярности и т.д. Попробовал задать первую сортировку по 'CATALOG_AVAILABLE' но выяснилось, что это поле 'Y' даже для товаров, которых нет в наличии, т.е. фокус не удался
----
Что то уже изменилось... или воз и ныне там?
Есть товары которые не доступны для покупки (нет на складе), но у инфоблока добавлено свойство "COMING_SOON" - "скоро в продаже".
И нужно что бы товары которые недоступны для покупки НО имеющие установку (галочку) в св-ве "COMING_SOON" сортировались по цене в общем списке, а те, которые (доступны для покупки\нет на складе) не имеют этой галки, переносились в конец списка товаров.
Мне удалось с помощью сортировки, эти товары с галкой "COMING_SOON" лишь поднять в начало списка товаров доступны для покупки (нет на складе)
Я думаю выбрать "отображать в общем списке" для товаров которых нет на складе, но вопрос как тогда все те что без галки "COMING_SOON"
перенести в конец списка....
1. добавление товару свойства "в наличии" которое заполняется при изменении количества товара на складе( исходя из того что нужно поставить, вешается на событие)
2. Выставлением 1 сортировки по этому полю 'asc,nulls', а второй как вам нужно.
"ELEMENT_SORT_FIELD" => 'PROPERTY_TOBUY',
"ELEMENT_SORT_ORDER" => 'asc, nulls',
"ELEMENT_SORT_FIELD2" => 'PROPERTY_MINIMUM_PRICE',
"ELEMENT_SORT_ORDER2" => 'asc',