Сопутствующие товары - связи, комплекты и подарки
Связываем товары между собой, выводим аксессуары в карточке и разбираемся, чем связь отличается от комплекта.
Решение
Заводим свойство-привязку у товаров:
$prop = new CIBlockProperty();$prop->Add([ 'IBLOCK_ID' => 5, 'NAME' => 'Сопутствующие товары', 'CODE' => 'RELATED', 'PROPERTY_TYPE' => 'E', // привязка к элементам инфоблока 'LINK_IBLOCK_ID' => 5, // к тому же каталогу 'MULTIPLE' => 'Y',]);Привязка хранит идентификаторы связанных элементов. Это самый простой механизм связи: он не требует ни отдельных сущностей, ни своего кода, и переживает любые обновления платформы.
Выводим связанные товары в карточке:
$related = (array)($arResult['PROPERTIES']['RELATED']['VALUE'] ?? []);if ($related) { $res = CIBlockElement::GetList(['SORT' => 'ASC'], ['IBLOCK_ID' => 5, 'ID' => $related, 'ACTIVE' => 'Y'], false, false, ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE']);}Одна выборка по списку идентификаторов заменяет цикл с запросом на каждый товар. Проверка активности здесь обязательна: снятая с продажи позиция не должна попасть в блок аксессуаров.
Собираем связи автоматически по разделу:
// частый случай: аксессуары лежат своим разделом и подходят всем товарам ветки$res = CIBlockElement::GetList(['RAND' => 'ASC'], ['IBLOCK_ID' => 5, 'SECTION_ID' => $accessoriesSectionId, 'ACTIVE' => 'Y'], false, ['nTopCount' => 6], ['ID', 'NAME', 'DETAIL_PAGE_URL']);Автоматический подбор по разделу дешевле ручных связей и годится там, где аксессуары общие. Ручная привязка нужна, когда к каждому товару подходит свой набор, и заполняет её контент-менеджер.
Отличаем связь от комплекта:
// комплект - отдельный тип товара: он покупается целиком и имеет свою цену$product = CCatalogProduct::GetByID($productId);printf("тип товара=%s\n", $product['TYPE']); // обычный, набор или комплектСвязь только предлагает купить что-то ещё, а комплект продаётся как единая позиция со своей ценой и своим остатком. Путать их не стоит: у комплекта совсем другая логика списания и другая карточка товара.
Список связей стоит держать коротким. Шесть-восемь позиций покупатель просматривает, тридцать - пролистывает мимо, и на скорость страницы длинный список влияет заметнее, чем на продажи.
Связанные товары стоит показывать там, где они действительно помогают: в карточке и в корзине перед оформлением. Блок аксессуаров на витрине списка только удлиняет страницу и почти не работает.
Подарок за покупку - это правило корзины, а вовсе не связь между товарами. Условие описывает, за что дарят, действие добавляет позицию с нулевой ценой, и всё это живёт в модуле продаж отдельно от каталога.
Типичные проблемы
В блоке аксессуаров пусто.
Свойство-привязка у этого товара не заполнено. Механизм ничего не подбирает сам, и значения проставляют вручную либо своим кодом.
Среди аксессуаров снятые с продажи позиции.
В выборке связанных товаров нет проверки активности. Привязка хранит идентификаторы независимо от состояния самого товара.
Страница товара стала медленной.
Связанные товары выбираются по одному в цикле шаблона. Их берут одной общей выборкой по списку идентификаторов.
Комплект списывается не так, как ожидали.
Комплект спутан с обычной связью между товарами. Это отдельный тип товара со своей логикой списания остатков.
Подарок не добавляется в корзину.
Правило корзины не выполняется по своим собственным условиям. Подарок относится к механизму скидок, а не к каталогу товаров.
Частые вопросы
Как перенести связи из учётной системы?
Через свойство-привязку: обмен умеет заполнять его по внешним кодам. Связи при этом должны быть описаны в самой номенклатуре.
Что лучше: ручные связи или подбор по разделу?
Ручные точнее и дороже в поддержке, подбор по разделу дешевле и грубее. На большом каталоге обычно берут второй вариант.
Можно ли показывать «с этим покупают»?
Да, но это уже статистика заказов, а не свойство товара. Такой блок собирают своим запросом по составу прошлых заказов.
Комплект или набор?
Набор собирается покупателем из перечисленных позиций, комплект продаётся фиксированным составом. У них разные типы товара и разное поведение в корзине.
Смежное
- Каталог товаров - оглавление подтемы
- Персональные рекомендации: блок на витрине, данные, проверка - автоматический подбор вместо ручных связей
- Комплекты и наборы товаров: состав, цена, продажа - комплект как отдельный товар подробнее
- Карточка товара: вывод свойств, картинок и характеристик - где выводится блок аксессуаров
- Множественные свойства: вывод файлов, фильтр, удаление значений - как хранятся привязки
- Правила работы с корзиной: условия, порядок, отладка - подарок за покупку
- Каталог и продажи - устройство магазина целиком