Поддержка серверов

Add2BasketByProductID: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=164252

//    Add2BasketByProductID()
//    /bitrix/modules/catalog/include.php:1519

function Add2BasketByProductID($productId, $quantity = 1, $rewriteFields = array(), $productParams = false)
{
    global $APPLICATION;

    $result = false;

    /* for old use */
    if ($productParams === false)
    {
        $productParams = $rewriteFields;
        $rewriteFields = array();
    }

    $rewrite = (!empty($rewriteFields) && is_array($rewriteFields));
    if ($rewrite && isset($rewriteFields['SUBSCRIBE']) && $rewriteFields['SUBSCRIBE'] == 'Y')
        return SubscribeProduct($productId, $rewriteFields, $productParams);

    $quantity = (empty($quantity) ? 1 : (float)$quantity);
    if ($quantity <= 0)
        $quantity = 1;

    $product = array(
        'PRODUCT_ID' => $productId,
        'QUANTITY' => $quantity
    );
    if (!empty($productParams))
        $product['PROPS'] = $productParams;

    $basketResult = Catalog\Product\Basket::addProduct($product, ($rewrite ? $rewriteFields : array()));
    if ($basketResult->isSuccess())
    {
        $data = $basketResult->getData();
        $result = $data['ID'];
        unset($data);

        if (!empty($rewriteFields['ORDER_ID']) && intval($rewriteFields['ORDER_ID']) > 0)
        {
            trigger_error("Wrong API usage of adding a product in order", E_USER_WARNING);

            $productId = (int)$productId;
            if ($productId <= 0)
            {
                $APPLICATION->ThrowException(
                    Main\Localization\Loc::getMessage('BX_CATALOG_PRODUCT_BASKET_ERR_NO_PRODUCT')
                );
                return $result;
            }

            $module = 'catalog';
            if (array_key_exists('MODULE', $rewriteFields))
            {
                $module = $rewriteFields['MODULE'];
            }

            $siteId = SITE_ID;
            if (!empty($rewriteFields['LID']))
            {
                $siteId = $rewriteFields['LID'];
            }

            $basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), $siteId);

            $propertyList = array();
            if (!empty($product['PROPS']) && is_array($product['PROPS']))
            {
                $propertyList = $product['PROPS'];
            }

            $basketItem = $basket->getExistsItem($module, $productId, $propertyList);
            if ($basketItem)
            {
                $basketItem->setFieldNoDemand('ORDER_ID', intval($rewriteFields['ORDER_ID']));
                $r = $basket->save();

                $orderId = intval($rewriteFields['ORDER_ID']);
                $order = \Bitrix\Sale\Order::load($orderId);
                if ($order)
                {
                    $basket = $order->getBasket();
                    $basket->refresh();
                    $r = $order->save();
                    if (!$r->isSuccess())
                    {
                        $APPLICATION->ThrowException(
                            implode('; ', $r->getErrorMessages())
                        );
                    }
                }

            }
        }

    }
    else
    {
        $APPLICATION->ThrowException(
            implode('; ', $basketResult->getErrorMessages())
        );
    }
    unset($product);
    unset($basketResult);

    return $result;
}

Блог разработчика

9 Августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 Июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 Июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение