Особенность Битрикса в плане торгового каталога состоит в том, что товар хранится распределенно в нескольких таблицах. Такой способ хранения связан с широкими возможностями Битрикса для e-commerce. Поэтому и создавать товары с помощью API нужно в несколько шагов.
Шаг 1. Создаем элемент инфоблока
На этом шаге создаются все данные для будущего товара: название, картинки, описания, заполняются все свойства.
Используемый метод: CIBlockElement::Add
Пример реализации:
$IBLOCK_ID = 11; //ID инфоблока с товарами
$el = new CIBlockElement;
    $PROP = array(); //тут хранятся все свойства элемента
   $PROP[645] = $arHolidays;
   $PROP[646] = "15fr8458";
    $arParams = array("replace_space" => "-", "replace_other" => "-"); //задаем параметры транслита для формирования ЧПУ
    $code = Cutil::translit($name, "ru", $arParams); //формируем CODE из имени товара
    $image = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"] . "/parse/files/" . $filename); //получаем детальную картинку через прямую ссылку на файл
    $arLoadProductArray = array(
        "MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем
        "IBLOCK_SECTION_ID" => 185,          // ID раздела
        "IBLOCK_ID" => $IBLOCK_ID,
        "PROPERTY_VALUES" => $PROP,
        "NAME" => $name,
        "ACTIVE" => "Y",
        "CODE" => $code,
        "DETAIL_PICTURE" => $image
    );
    if ($PRODUCT_ID = $el->Add($arLoadProductArray, false, true, true)) {
        echo "New ID: " . $PRODUCT_ID;
Тут нужно обратить внимание на следующее:
- Используем штатный translit битрикса для формирования ЧПУ (докум.)
 - Загружаем детальную картинку по прямой ссылке на файл
 - В самом методе Add используем следующие параметры:
- $arLoadProductArray - все данные о продукте, которые мы собрали выше
 - второй параметр (bWorkFlow) = false (элемент не участвует в режиме документооборота)
 - третий bUpdateSearch = true - в этом случае элмент сразу будет проиндексирован для поиска. Если добавляете много элементов за раз, то параметр можно отключить, но после импорта будет нужно переиндексировать поиск
 - последний - bResizePictures = true - в этом случае из детальной картинки будет автоматически создана превьюшка по правилам, которые описаниы в настройках инфоблока
 
 
Шаг 2. Создаем товар торгового каталога
На этом шаге задается тип товара (простой / с торговыми предложениями), наличие на складах, количество в резерве и т.д.
Используемый метод: CCatalogProduct::Add
Пример:
$arFieldsProduct = array(
            "ID" => $PRODUCT_ID,
            "AVAILABLE" => 'Y',
            "QUANTITY" => 1000,
        );
        if (CCatalogProduct::Add($arFieldsProduct)) {
            echo "Добавили параметры товара к элементу каталога " . $PRODUCT_ID . '<br>';
}
Полный набор параметров описан в документации. Нам тут важно следующее:
- PRODUCT_ID мы уже получили на Шаге1.
 - Не забываем проверить, создался ли элемент инфоблока на шаге 1!!
 - AVAILABLE = Y, чтобы товар был доступен для продажи
 - QUANTITY > 0, чтобы в системе он числился в наличии (если в ТЗ не оговорено иное)
 - Здесь же может быть указано и количество товара в резерве, его массогабаритные параметры и др.
 
Шаг 3. Задаем цены на созданный товар
Задаем необходимые цены (их может быть несколько!) на товар.
Используемый метод: CPrice::Add
Пример:
$arFieldsPrice = array(
                "PRODUCT_ID" => $PRODUCT_ID,
                "CATALOG_GROUP_ID" => 1,
                "PRICE" => 4,
                "CURRENCY" => "BYN"
            );
            CPrice::Add($arFieldsPrice);
Тут важно:
- PRODUCT_ID мы уже получили на Шаге1.
 - CATALOG_GROUP_ID - ID кода цены из списка цен. Для Малого Бизнеса это всегда 1, а для Бизнеса и корпорталов возможны варианты.
 
Вот и всё, можете брать и пользоваться. При желании можно это всё собрать в одну функцию и пользоваться ей дальше
Больше полезных материалов в нашем Telegram канале. Вступайте и будем на связи! https://t.me/bf_conversion


Комментарии 1