Как работать с корзиной в 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.

Пример создания новой корзины и привязки к заказу

Заключение

На этом все. В документации Битрикса вы также можете найти подсказки и ответы на свои вопросы. Все моменты, конечно сложно рассмотреть в одной статье, поэтому если у вас есть вопросы, замечания или что добавить – пишите комментарии.