Свойства торговых предложений - вывод выбора и связь с товаром
Настраиваем свойства торговых предложений так, чтобы в карточке товара появился выбор размера или цвета, и разбираемся с лишними вариантами.
Решение
Смотрим, где какие свойства заведены:
use Bitrix\Main\Loader;
Loader::includeModule('catalog');$offersIblock = CCatalogSku::GetInfoByProductIBlock(5); // инфоблок предложенийprintf("товары=%s предложения=%s связь=%s\n", $offersIblock['PRODUCT_IBLOCK_ID'], $offersIblock['IBLOCK_ID'], $offersIblock['SKU_PROPERTY_ID']);Товары и предложения лежат в разных инфоблоках, связанных между собой отдельным свойством. Свойство, заведённое у товара, у предложений не появится, и это первая причина жалобы «завёл размер, а выбора в карточке нет».
Отмечаем свойства, по которым строится выбор:
$prop = new CIBlockProperty();$prop->Update($sizePropertyId, [ 'IBLOCK_ID' => $offersIblock['IBLOCK_ID'], 'PROPERTY_TYPE' => 'L', // список: значения выбираются, а не вводятся 'MULTIPLE' => 'N', // множественное свойство выбор ломает]);// свойства для выбора отмечаются в настройках торгового каталогаВыбор строится по свойствам типа «список» и по привязкам к справочникам значений. Множественное свойство для выбора не годится в принципе: одно торговое предложение должно соответствовать ровно одному сочетанию значений.
Выводим выбор в карточке товара:
'OFFERS_PROPERTY_CODE' => ['SIZE', 'COLOR'], // свойства выбора'OFFERS_CART_PROPERTIES' => ['SIZE', 'COLOR'], // что запомнить в корзине'OFFERS_SORT_FIELD' => 'SORT', // порядок вариантов в карточке'PRODUCT_PROPERTIES' => [], // свойства товара, не предложений// список свойств выбора и список свойств корзины настраиваются раздельноПараметров здесь два, и они отвечают за разное: первый решает, из чего покупатель выбирает, второй - что уедет в корзину вместе с позицией. Свойство, забытое во втором параметре, потеряется уже при оформлении заказа покупателем.
Считаем, сколько предложений получилось у товара:
$res = CIBlockElement::GetList([], [ 'IBLOCK_ID' => $offersIblock['IBLOCK_ID'], 'PROPERTY_' . $offersIblock['SKU_PROPERTY_ID'] => $productId,], false, false, ['ID', 'NAME', 'PROPERTY_SIZE', 'PROPERTY_COLOR']);printf("предложений: %d\n", $res->SelectedRowsCount());// свойство связи у каждого инфоблока своё: его номер берут из настроек каталогаЧисло предложений равно числу сочетаний значений выбранных свойств. Три размера и два цвета дают шесть отдельных предложений, и каждое из них - самостоятельный элемент со своей ценой и своим остатком на складе.
Лишние торговые предложения почти всегда приезжают из учётной системы. Там характеристика номенклатуры может отличаться пробелом или регистром, и на сайте это уже другое значение, а значит и другое предложение. Чистят такие дубли на стороне источника, а не правкой элементов на сайте.
Разделение свойств между товаром и предложением стоит продумать до первой выгрузки. Всё, что различает варианты, живёт у предложения; всё, что одинаково для них всех, - у товара. Смешение этих двух наборов приводит либо к дублированию характеристик в каждом предложении, либо к невозможности их отфильтровать.
Свойства самого товара выводятся в карточке отдельным параметром компонента. Их не стоит дублировать в предложениях: одинаковые для всех вариантов характеристики описывают товар, а не конкретное сочетание размера и цвета.
Типичные проблемы
Свойство заведено, но выбора в карточке нет.
Оно заведено у товара, а не у инфоблока торговых предложений. Это два разных инфоблока с разными наборами свойств.
Выбор показывается, но не переключает предложения.
Свойство не отмечено как участвующее в выборе либо оно множественное. Выбор строится только по одиночным свойствам типа «список».
В корзине пропал размер.
Свойство не перечислено в параметре свойств корзины компонента. Выбор в карточке и состав позиции корзины настраиваются двумя разными параметрами.
Предложений больше, чем реальных вариантов.
Значения характеристик из учётной системы различаются регистром или лишним пробелом. Каждое такое отличие создаёт на сайте отдельное предложение.
У предложения нет цены.
Цена задана у товара, а покупается торговое предложение. Цены и остатки хранятся у того элемента, который в итоге кладётся в корзину.
Частые вопросы
Сколько свойств выбора разумно заводить?
Два-три: размер, цвет, объём. Каждое новое свойство умножает число предложений, и на пятом измерении каталог становится неуправляемым.
Можно ли вывести выбор списком вместо картинок?
Да, это оформление шаблона: данные о вариантах компонент отдаёт одинаково. Тип отображения свойства влияет только на фильтр.
Как показать предложение по умолчанию?
Сортировкой предложений: первым выбирается верхнее по порядку. Осмысленный порядок задают полем сортировки при выгрузке.
Что делать с предложением без характеристик?
Оно приезжает, когда у номенклатуры нет ни одной характеристики. Такой товар правильнее выгружать обычным элементом, без инфоблока предложений.
Смежное
-
Торговые предложения - оглавление подтемы
-
Торговые предложения не выводятся: разбор причин - почему свойство не годится для выбора
-
Торговые предложения: устройство и настройка - как связаны товар и варианты
-
Выгрузка торговых предложений из 1С - откуда приезжают характеристики
-
Каталог и продажи - устройство магазина целиком
-
Свойства-списки: значения, сортировка, значение по умолчанию - порядок значений в выборе варианта
-
Быстрый просмотр товара: всплывающая карточка и её сбои - выбор варианта во всплывающем окне
-
Выборка товаров вместе с предложениями: цены, наличие, фильтр - те же свойства в выборке списка
-
Картинки торговых предложений: смена при выборе варианта - изображения вариантов рядом со свойствами
-
Фильтр по свойствам предложений: настройка, индекс, вывод - те же свойства в умном фильтре