Как работать с корзиной в D7 Битрикс
В этой статье рассмотрим основные функции ядра D7 Битрикс для работы с корзиной. На мой взгляд тема очень актуальная и мне часто приходится иметь дело с этим. Поэтому коротко и понятно в этой статье я изложу материал, который у меня накопился.
Простые классы
Для добавления товара в корзину в D7 существует класс Bitrix\Catalog\Product\Basket c аналогом метода Add2BasketByProductID
ORM-классы
Обновить товар в корзине с помощью того же класса не получится, но можно сделать с помощью ORM-класса Bitrix\Sale\Internals\BasketTable
Но для того, чтобы обновить товар в корзине, нужно знать ID корзины. Получить его можно с помощью метода GetList:
Теперь, зная идентификатор, можно обновить корзину:
С помощью этого ORM-класса также можно и добавлять товары в корзину с помощью метода add, но я не рекомендую этого делать из-за низкоуровневости его работы – могут некоторые поля потеряться.
Свойства
Обновить свойства корзины с помощью класс BasketTable у вас не получится, так как Корзина и Свойства корзины – это разные таблицы. Поэтому для свойств корзины есть свой ORM-класс Bitrix\Sale\Internals\BasketPropertyTable
Чтобы добавить новое свойство корзины, нужно знать ее идентификатор:
А вот, чтобы обновить свойство нужно знать его идентификатор. Его можно получить с помощью getList и затем обновить значение свойства:
Универсальные классы
Более крутой способ работы с корзиной – использование класса Bitrix\Sale\Basket.
Если вы работаете в phpStorm не забудьте подключать автоподсветку для классов в блоке с комментариями. Они очень помогут разобраться.
Способы получения объекта корзины:
Способы добавления товаров в корзину:
Из корзины можно получить объект интересующей нас позицию, зная ID:
Пример для демонстрации возможности работы с корзиной
Запомните, что для работы с полями используются getField и setField, для свойств – как на примере выше получаем коллекцию.
Часто используемые функции:
- Получить количество товара в корзине $basketItem->getQuantity()
- Получить идентификатор корзины $basketItem->getProductId()
- Получить идентификатор товара $basketItem->getId()
- Получить цену товара $basketItem->getPrice()
- Записать количество $basketItem->setField(‘QUANTITY’, 2)
- Получить название $basketItem->getField(‘NAME’)
- Удалить корзину $basketItem->delete()
- Возвратить объект заказа, к которому привязана корзина $basket->getOrder()
- Записать сразу несколько полей $basketItem->setFields([])
Вы можете получить все поля с помощью $basketItem->getFieldValues() и подглядеть коды полей, чтобы затем управлять с помощью методов getField и setField.
Пример создания новой корзины и привязки к заказу
Заключение
На этом все. В документации Битрикса вы также можете найти подсказки и ответы на свои вопросы. Все моменты, конечно сложно рассмотреть в одной статье, поэтому если у вас есть вопросы, замечания или что добавить – пишите комментарии.