add
\Bitrix\Main\ORM\Data\AddResult public static \Bitrix\Catalog\Model\Product::add( array $data );
Метод добавляет запись товара для существующего элемента инфоблока, отправляет события модели и запускает автоматические действия каталога. Статический метод.
Метод унаследован от \Bitrix\Catalog\Model\Entity. Класс Product дополняет базовый алгоритм внутренней проверкой полей товара и автоматическими действиями каталога.
Параметры
| Параметр | Описание |
|---|---|
$data |
Поля товара. Метод принимает плоский массив полей или структуру:
[ "fields" => [ "ID" => 123, "TYPE" => ProductTable::TYPE_PRODUCT, "QUANTITY" => 10 ], "external_fields" => [ "IBLOCK_ID" => 2 ], "actions" => [] ]Плоский массив метод помещает в ключ fields. Ключи external_fields и actions в этом случае будут пустыми
|
Основные поля массива fields
| Поле | Описание |
|---|---|
| ID | Идентификатор существующего элемента инфоблока. Обязательное поле |
| TYPE | Тип товара. Если поле не передано, метод выбирает тип по настройкам каталога инфоблока |
| AVAILABLE | Доступность товара: ProductTable::STATUS_YES или ProductTable::STATUS_NO. Если поле не передано, метод рассчитывает значение |
| QUANTITY | Количество товара, число или числовая строка. По умолчанию — 0 |
| QUANTITY_RESERVED | Зарезервированное количество. Значение не может быть отрицательным |
| QUANTITY_TRACE | Настройка количественного учета: STATUS_YES, STATUS_NO или значение по умолчанию STATUS_DEFAULT |
| CAN_BUY_ZERO | Настройка покупки при нулевом остатке: STATUS_YES, STATUS_NO или STATUS_DEFAULT |
| SUBSCRIBE | Настройка подписки на поступление: STATUS_YES, STATUS_NO или STATUS_DEFAULT |
| WEIGHT | Вес товара, число или числовая строка. По умолчанию — 0 |
| MEASURE | Идентификатор единицы измерения или null |
| WIDTH | Ширина товара, положительное число или null |
| LENGTH | Длина товара, положительное число или null |
| HEIGHT | Высота товара, положительное число или null |
| PURCHASING_PRICE | Закупочная цена. Если цена задана, передайте корректную валюту |
| PURCHASING_CURRENCY | Трехсимвольный код валюты закупочной цены |
| VAT_ID | Идентификатор ставки НДС или null |
| VAT_INCLUDED | Признак включения НДС в цену: STATUS_YES или STATUS_NO |
| BARCODE_MULTI | Признак поддержки нескольких штрихкодов: STATUS_YES или STATUS_NO |
| BUNDLE | Признак комплекта: STATUS_YES или STATUS_NO |
| TMP_ID | Временный идентификатор длиной до 40 символов или null |
Поля массива external_fields
| Поле | Описание |
|---|---|
| IBLOCK_ID | Идентификатор инфоблока элемента. Если поле не передано, метод определяет инфоблок по ID. Инфоблок должен быть каталогом |
Массив actions содержит внутренние флаги автоматических действий. Обычно его не заполняют вручную.
Возвращаемое значение
Метод возвращает объект \Bitrix\Main\ORM\Data\AddResult. Через объект можно проверить результат, получить ошибки и идентификатор добавленной записи.
Особенности
Для типов TYPE_EMPTY_SKU и TYPE_FREE_OFFER метод отключает доступность и обнуляет количество. Для типа TYPE_SERVICE метод отключает количественный учет и разрешает покупку при нулевом остатке.
Пример
Пример создает запись товара для заранее подготовленного элемента инфоблока. Элемент должен находиться в инфоблоке, который настроен как каталог, и не должен иметь записи в таблице товаров.
<?php
use Bitrix\Catalog\Model\Product;
use Bitrix\Catalog\ProductTable;
use Bitrix\Main\Loader;
if (!Loader::includeModule('catalog'))
{
throw new RuntimeException('Не удалось подключить модуль catalog');
}
// Идентификатор специально подготовленного элемента инфоблока
$elementId = 123;
// Идентификатор каталога, в котором находится элемент
$iblockId = 2;
try
{
$result = Product::add([
'fields' => [
'ID' => $elementId,
'TYPE' => ProductTable::TYPE_PRODUCT,
'QUANTITY' => 10,
],
'external_fields' => [
'IBLOCK_ID' => $iblockId,
],
]);
if (!$result->isSuccess())
{
echo implode(PHP_EOL, $result->getErrorMessages());
return;
}
echo 'Товар добавлен. Идентификатор: ' . (int)$result->getId();
}
catch (Throwable $exception)
{
echo $exception->getMessage();
}