Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

Добавление не существующего товара в корзину и заказ, 1С-Битрикс

Просмотров: 171

Задача: нужно добавить в корзину товар, которого не существует в каталоге, с возможностью задать ему произвольные название и цену.

Все просто: так как методу CSaleBasket::Add нужно обязательно передать ID товара, мы можем сгенерировать случайное число с помощью PHP и использовать его в качестве ID.

CSaleBasket::Add не требуется наличие товара с таким ID в базе сайта. Если не хотите, чтобы сгенерированный ID совпал с уже существующим в базе, можно задать диапазон, который не будет использоваться. Например, от 10 до 11 миллиардов.

Добавление товара в корзину.

Теперь: там где вам нужно, на любом шаге или в любом обработчике добавляем код:


$pseudoId = rand(10000000000, 11000000000);
$arFields = array(
    "PRODUCT_ID" => $pseudoId,
    "PRODUCT_PRICE_ID" => '1',
    "PRICE" =>  '1000',
    "CURRENCY" => "RUB",
    "WEIGHT" => '',
    "QUANTITY" => 1,
    "LID" => LANG,
    "DELAY" => "N",
    "CAN_BUY" => "Y",
    "NAME" => "Абракадабра " . $pseudoId,
    "CALLBACK_FUNC" => "",
    "MODULE" => "",
    "NOTES" => "",
    "ORDER_CALLBACK_FUNC" => "",
    "DETAIL_PAGE_URL" => ""
);
$arProps = array();
$arFields["PROPS"] = $arProps;
CSaleBasket::Add($arFields);

Здесь я добавил в название псевдотовара сгенерированный ID, чтобы проверить работоспособность и убедиться, что при каждом добавлении создается новый товар. Я запустил скрипт три раза, в результате в корзине появились три разных товара (цену и количество менял вручную).

Добавление в корзину и заказ не существующего товара в 1С-Битрикс 2

Заказ тоже оформился правильно, с содержимым, включающим несуществующие товары:

Добавление в корзину и заказ не существующего товара в 1С-Битрикс 1
Михаил Базаров 06.05.2023
Эта заметка, продолжение к
https://bazarow.ru/blog-note/14681/ (Дополнительные опции/услуги, добавляемые в корзину, в карточке товаров)
Михаил Базаров 13.05.2023
Вариант на D7:
Код
$item = $basket->createItem('catalog', rand(10000000000, 11000000000));
$item->setFields([
        'QUANTITY' => '1',
        'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(),
        'LID' => Bitrix\Main\Context::getCurrent()->getSite(),
        'NAME' => 'Абракадабра',
        'PRICE' => '123456',
        'CUSTOM_PRICE' => 'Y',
]);
$basket->save();