+7 495 008 8452 пн.-пт. 10:00 – 17:00
Загрузка...
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Добавляем товар в Битрикс правильно

Немного ликбеза. В Битрикс элемент инфоблока отдельно, цена (несколько) отдельно, и сущность товара - отдельно. Что такое товар? Это остаток, закупочная цена, настройки уменьшения остатка, и так далее. В общем, все, кроме цены. Вот тут небольшой совет как его добавлять более оптимально.

Допустим у нас идет цикл элементов, в котором мы обновляем остатки (как раз товары). Типичный импорт.
Примерно так:
$res = CIBlockElement::getList(array(), array('ID', 'CATALOG_QUANTITY'));  
while ($row = $res->fetch()) { 
    //  
}


Как обновить остаток?
Мы не сможем сделать вот так:
CCatalogProduct::update($row['ID'], array('QUANTITY' => $fields['QUANTITY']));


Потому что товара еще может не быть в базе (не смотря на то, что элемент уже есть).

Мы можем сделать вот так:
CCatalogProduct::add(array('ID' => $row['ID'], 'QUANTITY' => $fields['QUANTITY']));


По идее этого достаточно. В последнем случае система добавит товар только если его нет.

Но я бы улучшил еще вот так обновление остатка:
if ($row['CATALOG_QUANTITY'] === null || $row['CATALOG_QUANTITY'] === '') {
   CCatalogProduct::add(array('ID' => $row['ID'], 'QUANTITY' => $fields['QUANTITY']), false);
} elseif ($fields['QUANTITY'] != $row['CATALOG_QUANTITY']) {
   CCatalogProduct::update($row['ID'], array('QUANTITY' => $fields['QUANTITY']));
}


То есть - идем добавлять товар только если его 100% нет еще в системе. В ином случае обновляем.

Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...