Робота з кошиком в бітрікс d7
Починаючи з 16 версії використовується нова версія ядра магазину Бітрікс, що є частиною ядра Бітрікс D7. Але деякі класи і методи доступні і в 15 версії магазину (sale, що не main). Всі класи для роботи з магазином зібрані в модулі sale, тому для роботи з прикладами в статті використовуємо use для простору імен модуля інтернет-магазину.
Кошик (Sale \ Basket)
Кошик являє собою екземпляр класу Bitrix \ Sale \ Basket.
Кошик можна отримати для поточного користувача:
Примітка: getSite працює тільки в публічній частині.
Або отримати корзину замовлення:
Інформація про кошику:
Додавання товару в кошик (аналог CSaleBasket :: Add), оновлення записи і перевірка наявності:
Отримання записи по ID і видалення запису з кошика (аналог CSaleBasket :: Delete):
Отримання товарів у кошику, доступних для покупки (CAN_BUY = Y):
Також є пара методів для отримання кошика у вигляді, придатної для використання в листі або для виведення кількості товарів:
Товар в кошику (Sale \ BasketItem)
Товари в кошику представлені у вигляді колекції об'єктів класу Bitrix \ Sale \ BasketItem:
Sale \ Basket реалізує інтерфейси \ ArrayAccess, \ Countable і \ IteratorAggregate, тому з об'єктом кошика можна звертатися як з масивом, отримуючи товари в кошику за індексом або перебираючи записи за допомогою foreach:
Інформація про товари в кошику:
Також із запису можна отримати інші сутності:
Дії над записами:
Властивості товарів в кошику (Sale \ BasketPropertiesCollection)
У товару в кошику можна отримати колекцію властивостей - об'єкт Bitrix \ Sale \ BasketPropertiesCollection:
Метод getPropertyValues повертає масив властивостей.
Додати нову властивість або змінити існуючі можна наступним чином:
Приклад видалення властивості:
ORM-класи
Звертатися безпосередньо до таблиці кошика, без використання об'єктів можна з використанням ORM-класу Bitrix \ Sale \ Internals \ BasketTable. Наприклад, перебрати товари в кошику поточного користувача:
А таким чином можемо отримати кількість і суму товарів в кошику поточного користувача:
Отримати властивості товарів в кошику допоможе клас Bitrix \ Sale \ Internals \ BasketPropertyTable: