2020-08-20 09:35:00
1375
Еще одна полезная статья как добавить товар в корзину на D7 Перейти


Это одна из реализаций добавления товара в корзину через 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)