Bitrix добавление товара в корзину через ajax

На одном из сайтов появилась необходимость рассчитывать стоимость товара по формуле. те товар имел базовую цену, а конечная должна была быть рассчитана интерактивно а сайте.

Саму формулу я расписывать не буду (на вряд ли кому то подойдёт), а вот способ добавления товара в корзину с другой ценой – я распишу.

Для начала за комментируем старую кнопку и добавим новую с функцией onclick.

<button id="add_basket" onclick="addbasket()">в корзину</button>

Распишем функцию addbasket().

<script type="text/javascript">
	function addbasket(){
		var count = 1;    // количество товара
		var tovar = 1120; // id товара
		var price = 200;  // цена за штуку 

		$.ajax({
			type: "POST",
			url: "/ajax/add_cart.php",
			cache: false,
			data: ({
				"count": count,
				"tovar": tovar,
				"price": price
			}),
			success: function(html) {
				//$("#basket").html(html);
			}
		});
	}
</script>

Переменные count, tovar и price у меня вычисляются прямо на странице, в примере я подставлю статичные данные.

Создаём в корне сайта папку ajax и создадим в ней файл add_cart.php. В этот файл записываем следующее:

<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
// Подключаем необходимые модули для работы с корзиной
\Bitrix\Main\Loader::IncludeModule("sale");
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), "s1");
CModule::IncludeModule("iblock");

//получаем из POST преданные данные и заносим их в свои переменные.
$quantity = $_POST['count'];
$productId = $_POST['tovar'];
$productPrice = $_POST['price'];

if ($item = $basket->getExistsItem('catalog', $productId)){
//Обновление товара в корзине
$item->setField('QUANTITY', $item->getQuantity() + $quantity);
}else{
//Добавление товара
	$item = $basket->createItem('catalog', $productId);
	$item->setFields([
	'QUANTITY' => $quantity,
	"PRICE" => $productPrice,
	'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
	'LID' => "s1",
	'PRODUCT_PROVIDER_CLASS' => \Bitrix\Catalog\Product\Basket::getDefaultProviderName() ,
]);
}
$basket->save();
?>

Вот и всё – при нажатии на нашу кнопку в карточке товара в корзину передадутся именно наша стоимость и количество товара.

Если надо добавить в корзину торговое предложение (например цвет) то в ajax запросе добавляем новую переменную “color”: colorName. В файле add_cart.php объявите массив для торгового предложения:

$properties = array();
$properties['COLOR'] = array(
    'NAME' => 'Цвет',
    'CODE' => 'COLOR',
    'VALUE' => $request->getPost("color"),
    'SORT' => 100
);

и перед сохранением товара добавьте строку

if (isset($properties)) {
    $basketPropertyCollection = $item->getPropertyCollection();
    $basketPropertyCollection->setProperty($properties);
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *