Блог Горошко Андрея 1C-Битрикс E-commerce в D7: Управление корзиной (Bitrix\Sale\Basket)

E-commerce в D7: Управление корзиной (Bitrix\Sale\Basket)

Средний рейтинг
Еще нет оценок

 Работа с корзиной — основа любого интернет-магазина.

Старые методы 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, работа с корзиной, интернет-магазин.

Мой рейтинг:

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

Related Post

 CIBlockElement::GetList — Полное руководство по выборке элементов инфоблока в Битрикс CIBlockElement::GetList — Полное руководство по выборке элементов инфоблока в Битрикс

Средний рейтинг Еще нет оценок CIBlockElement::GetList — это, без преувеличения, один из самых важных и часто используемых методов в API 1С-Битрикс. Он позволяет получать элементы из информационных блоков с гибкими условиями

Обновление свойств элемента инфоблока 1с BitrixОбновление свойств элемента инфоблока 1с Bitrix

Средний рейтинг Еще нет оценок SetPropertyValuesEx() — это метод для сохранения значений свойств элемента информационного блока в БД. Этот метод более экономен в количестве запросов к БД, чем SetPropertyValues(), потому

Генерация случайных строк и чисел: Bitrix\Main\Security\Random vs RandomSequenceГенерация случайных строк и чисел: Bitrix\Main\Security\Random vs RandomSequence

Средний рейтинг Еще нет оценок В Битрикс есть два класса для генерации случайных данных, и их часто путают. Они предназначены для совершенно разных целей. 1. Bitrix\Main\Security\Random (Для безопасности) Используйте этот класс, когда