Это одна из реализаций добавления товара в корзину через api Битрикса. Этот код можно дополнять и дорабатывать под собственные нужды, если требуется просто добавить товар в корзину, есть более простое решение
- это добавить в url адрес сайта параметры ?action=ADD2BASKET&id=ид-товара.
На ajax это делается очень просто.
<script>
var ajax = $.ajax({
type: 'POST',
url: location.pathname + '?action=ADD2BASKET&id=105',
data: {
ajax_basket: 'Y',
quantity: '1'
}
});
ajax.done(function(data) {
if (data.STATUS == 'OK') {
// Товар успешно добавлен
}
});
</script>
Если нужно изменить какую-то логику в работе, то можно воспользоваться вариантом ниже.
Практически такой же код jquery
<script>
let dataid = 'ит товара';
let ajax = $.ajax({
type: 'GET',
url: '/путь к файлу php/файл.php',
data: {dataid:dataid}
});
ajax.done(function(data) {
//какое-то действие
});
</script>
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
// подключаем prolog_before для работы
global $USER_ID;
$USER_ID = $USER->getID();
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
$data = $request->getQueryList()->toArray();
$dataid = $data['dataid']; // получаем товар переданный ajax
// Подключаем нужные модули
\Bitrix\Main\Loader::includeModule('sale');
\Bitrix\Main\Loader::includeModule('catalog');
\Bitrix\Main\Loader::includeModule('iblock');
$params = array(
'filter' => array(
"ID"=>$dataid
),
'select' => array(
'ID',
'NAME'
),
);
$rsItems = \Bitrix\Iblock\ElementTable::getList($params);
$arItem = $rsItems->fetch(); // получаем некоторую информацию об эелементе (товаре)
// Получаем корзину пользователя
$basket = \Bitrix\Sale\Basket::LoadItemsForFUser(
\Bitrix\Sale\Fuser::getId(),
's1'
);
if(!$basket) // если корзина не создана, то её нужно создать
$basket = Bitrix\Sale\Basket::create('s1');
$arBuyerGroups = CUser::GetUserGroup($USER_ID);
$arPrice = CCatalogProduct::GetOptimalPrice($dataid, 1, $arBuyerGroups, "N", array(), 's1', array());
$currentPrice = $arPrice['RESULT_PRICE']; // получаем цены с учётом скидок для групп пользователей
$arElement["PRICE"] = $currentPrice['DISCOUNT_PRICE'];
if ($item = $basket->getExistsItem('catalog', $dataid)) { // проверяем, есть ли элемент в корзине, если есть, то прибавляем количество
$item->setField('QUANTITY', $item->getQuantity() + 1);
}
else{ // если товара нет в корзине, то создаём его
$product = array('PRODUCT_ID' => $dataid, 'QUANTITY' => 1, 'NAME' => $arItem["NAME"], 'BASE_PRICE' => $arElement["PRICE"], 'CURRENCY' => 'RUB');
$item = $basket->createItem("catalog", $dataid);
$item->setFields($product);
}
$basket->save(); // сохраняем корзину
?>
Комментарии (45)