Skip to content

Instantly share code, notes, and snippets.

@JamesBondsky
Created February 13, 2021 23:59
Show Gist options
  • Save JamesBondsky/ff6a6d33657b36a2135c86cf5f0366da to your computer and use it in GitHub Desktop.
Save JamesBondsky/ff6a6d33657b36a2135c86cf5f0366da to your computer and use it in GitHub Desktop.
Класс для удобной реализации добавления удаления и обновления товаров в корзину на D7

Класс для удобной реализации добавления удаления и обновления товаров в корзину на D7

  • Подключаем через автолоад, ну или как удобно
<?php
namespace Isaev;
use \Bitrix\Main\Loader;
use \Bitrix\Sale;
use \Bitrix\Main\SystemException;
Loader::includeModule('sale');
Loader::includeModule('catalog');
class BasketHelper
{
public static $basket;
public static $_instance;
public function __construct()
{
$this->basket = static::getBasket();
}
/**
* @param $idItem - ID товара
* Метод добаляет товар в корзину
*/
public static function addItem($params)
{
if ($item = static::getExistsItem($params['idItem'])) {
// Удаляем элемент
static::removeItem($params['idItem']);
}
$fields = [
'PRODUCT_ID' => $params['idItem'], // ID товара, обязательно
'QUANTITY' => $params['qty'], // количество, обязательно
];
$addBasket = \Bitrix\Catalog\Product\Basket::addProduct($fields);
if (!$addBasket->isSuccess()) {
return [
'success' => false,
'message' => $addBasket->getErrorMessages()
];
} else {
return [
'success' => true,
'message' => $params['idItem']
];
}
}
/**
* @param $idItem - ID товара
* Метод добаляет товар в корзину
*/
public static function updateItem($params)
{
if ($item = static::getExistsItem($params['idItem'])) {
$basket = BasketHelper::getInstance()->basket;
// Обновляем кол-во
$result = $item->setField('QUANTITY', $params['qty']);
if ($result->isSuccess()) {
$basket->save();
return [
'success' => true,
'message' => $idItem
];
} else {
return [
'success' => false,
'message' => $result->getErrorMessages()
];
}
} else {
return [
'success' => false,
'message' => 'Товар не найден'
];
}
}
/**
* @param $idItem - ID товара
* Метод удаляет товар из корзины
*/
public function removeItem($params)
{
if ($item = static::getExistsItem($params['idItem'])) {
$basket = BasketHelper::getInstance()->basket;
$result = $item->delete();
if ($result->isSuccess()) {
$basket->save();
return [
'success' => true,
'message' => $idItem
];
} else {
return [
'success' => false,
'message' => $result->getErrorMessages()
];
}
} else {
return [
'success' => false,
'message' => 'Товар не найден'
];
}
}
/**
* Инициализация
*/
public static function getInstance()
{
if (self::$_instance == null) {
self::$_instance = new BasketHelper();
}
return self::$_instance;
}
/**
* Получаем обьект корзины пользователя
*/
public static function getBasket()
{
$context = \Bitrix\Main\Application::getInstance()->getContext();
$siteId = ($context->getSite() ?? 's1');
$fuser = \Bitrix\Sale\Fuser::getId();
$basket = \Bitrix\Sale\Basket::loadItemsForFUser($fuser, $siteId);
return $basket;
}
/**
* @param $idItem - ID товара
* Узнаем есть ли товар с таким ID в корзине
* @return mixed
*/
public static function getExistsItem(int $idItem)
{
$basket = BasketHelper::getInstance()->basket;
foreach ($basket as $basketItem) {
if ($basketItem->getField('PRODUCT_ID') == $idItem) {
return $basketItem;
}
}
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment