Особенность Битрикса в плане торгового каталога состоит в том, что товар хранится распределенно в нескольких таблицах. Такой способ хранения связан с широкими возможностями Битрикса для 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