- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/product/basket.php
- Класс: BitrixCatalogProductBasket
- Вызов: Basket::addProduct
static function addProduct(array $product, array $basketFields = [], array $options = [])
{
$result = new MainResult();
if (empty($product['PRODUCT_ID']))
{
$result->addError(new MainError(Loc::getMessage('BX_CATALOG_PRODUCT_BASKET_ERR_NO_PRODUCT')));
return $result;
}
$productId = (int)$product['PRODUCT_ID'];
if ($productId <= 0)
{
$result->addError(new MainError(MainLocalizationLoc::getMessage('BX_CATALOG_PRODUCT_BASKET_ERR_NO_PRODUCT')));
return $result;
}
$product['MODULE'] = 'catalog';
$product['PRODUCT_PROVIDER_CLASS'] = self::getDefaultProviderName();
if (!empty($basketFields))
$product = array_merge($product, $basketFields);
if (self::$saleIncluded === null)
self::$saleIncluded = Loader::includeModule('sale');
if (!self::$saleIncluded)
{
$result->addError(new MainError(Loc::getMessage('BX_CATALOG_PRODUCT_BASKET_ERR_NO_SALE')));
return $result;
}
$siteId = SITE_ID;
if (!empty($basketFields['LID']))
$siteId = $basketFields['LID'];
$context = array(
'SITE_ID' => $siteId,
);
$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);
/** @var SaleBasket $basketClass */
$basketClass = $registry->getBasketClassName();
$basket = $basketClass::loadItemsForFUser(SaleFuser::getId(), $siteId);
$options['CHECK_PERMISSIONS'] = 'Y';
$options['USE_MERGE'] = (isset($options['USE_MERGE']) && $options['USE_MERGE'] == 'N' ? 'N' : 'Y');
$options['CHECK_CRAWLERS'] = 'Y';
$result = static::add($basket, $product, $context, $options);
if ($result->isSuccess())
{
$saveResult = $basket->save();
if ($saveResult->isSuccess())
{
$resultData = $result->getData();
if (!empty($resultData['BASKET_ITEM']))
{
$item = $resultData['BASKET_ITEM'];
if ($item instanceof SaleBasketItemBase)
{
if (self::$statisticIncluded === null)
self::$statisticIncluded = MainLoader::includeModule('statistic');
if (self::$statisticIncluded)
{
CStatistic::Set_Event(
'sale2basket', 'catalog', $item->getField('DETAIL_PAGE_URL')
);
}
$result->setData(array(
'ID' => $item->getId()
));
}
else
{
$result->addError(new MainError(Loc::getMessage('BX_CATALOG_PRODUCT_BASKET_ERR_UNKNOWN')));
}
unset($item);
}
else
{
$result->addError(new MainError(Loc::getMessage('BX_CATALOG_PRODUCT_BASKET_ERR_UNKNOWN')));
}
unset($resultData);
}
else
{
$result->addErrors($saveResult->getErrors());
}
unset($saveResult);
}
unset($basket, $context, $siteId);
return $result;
}