Задача: нужно добавить в корзину товар, которого не существует в каталоге, с возможностью задать ему произвольные название и цену.
Все просто: так как методу 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, чтобы проверить работоспособность и убедиться, что при каждом добавлении создается новый товар. Я запустил скрипт три раза, в результате в корзине появились три разных товара (цену и количество менял вручную).

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


https://bazarow.ru/blog-note/14681/ (Дополнительные опции/услуги, добавляемые в корзину, в карточке товаров)
Все поля
Код |
---|
"NAME", // название товара "LID", // сайт, на котором сделана покупка "SORT", // сортировка "PRODUCT_ID", // код товара "BASE_PRICE", // цена без учета скидок и наценок "PRICE", // цена с учетом скидок и наценок "DISCOUNT_PRICE", // скидка "CURRENCY", // Валюта "CUSTOM_PRICE", // флаг(Y/N): кастомная цена или нет "QUANTITY", // количество "WEIGHT", // вес "DIMENSIONS", // размеры "MEASURE_CODE", // код единицы измерения "DELAY", // Флаг "товар отложен" (Y/N) "CAN_BUY", // Флаг "товар можно купить" (Y/N) "NOTES", // Особые заметки "VAT_RATE", // ставка НДС "VAT_INCLUDED", // флаг(Y/N): включен налог или нет "BARCODE_MULTI", // флаг(Y/N): штрихкод уникальный или нет "SUBSCRIBE", // флаг(Y/N): подписка на товар "PRODUCT_PROVIDER_CLASS", // Имя класса провайдера "TYPE", // тип товара "XML_ID" // внешний идентификатор |

Код |
---|
$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(); |
в корзине:
{{{FULL_PRICE_FORMATED}}} = вот так в корзине выводиться старая цена
{{{PRICE_FORMATED}}} = вот так уже с учетом скидки

Код |
---|
"PRICE" => '123', // цена с учетом скидок и наценок "DISCOUNT_PRICE" => '2', // скидка % |
