Работа с корзиной — основа любого интернет-магазина.
Старые методы CSaleBasket ушли в прошлое. В D7 используется мощная объектная модель Bitrix\Sale\Basket, которая автоматически учитывает скидки, правила работы с корзиной и привязку к пользователю.
1. Получение корзины
Чтобы работать с корзиной, нужно получить её объект для текущего пользователя (FUSER_ID) и текущего сайта.
use Bitrix\Main\Loader;
use Bitrix\Sale;
Loader::includeModule("sale");
Loader::includeModule("catalog");
$siteId = \Bitrix\Main\Context::getCurrent()->getSite();
$fUserId = Sale\Fuser::getId(); // Получаем ID покупателя (даже если он не авторизован)
// Загружаем корзину
$basket = Sale\Basket::loadItemsForFUser($fUserId, $siteId);2. Добавление товара
$productId = 123; // ID товара
$quantity = 2; // Количество
// Проверяем, есть ли уже этот товар в корзине
if ($item = $basket->getExistsItem('catalog', $productId)) {
// Если есть, увеличиваем количество
$item->setField('QUANTITY', $item->getQuantity() + $quantity);
} else {
// Если нет, создаем новый
$item = $basket->createItem('catalog', $productId);
$item->setFields([
'QUANTITY' => $quantity,
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => $siteId,
'PRODUCT_PROVIDER_CLASS' => '\Bitrix\Catalog\Product\Basket', // Важно для каталога!
]);
}
// Сохраняем изменения в БД
$result = $basket->save();
if ($result->isSuccess()) {
echo "Товар добавлен!";
} else {
print_r($result->getErrorMessages());
}Важно: PRODUCT_PROVIDER_CLASS отвечает за связь с модулем торгового каталога (проверка остатков, актуализация цен).
3. Изменение и удаление
// Перебор товаров
foreach ($basket as $basketItem) {
if ($basketItem->getProductId() == 123) {
// Изменение количества
$basketItem->setField('QUANTITY', 5);
// Удаление товара
// $basketItem->delete();
}
}
// Не забываем сохранить!
$basket->save();4. Получение общей стоимости
echo "Стоимость товаров: " . $basket->getPrice(); // С учетом скидок
echo "Вес: " . $basket->getWeight();
echo "Кол-во позиций: " . count($basket);Вывод:
Класс Bitrix\Sale\Basket предоставляет удобный интерфейс для любых операций с товарами покупателя.
Главное правило: после любых изменений (добавление, setField, delete) обязательно вызывайте метод save(), чтобы записать изменения в базу.
Bitrix\Sale\Basket, корзина Битрикс D7, добавление в корзину API, обновление количества, FUSER_ID, работа с корзиной, интернет-магазин.