- Подключаем через автолоад, ну или как удобно
Created
February 13, 2021 23:59
-
-
Save JamesBondsky/ff6a6d33657b36a2135c86cf5f0366da to your computer and use it in GitHub Desktop.
Класс для удобной реализации добавления удаления и обновления товаров в корзину на D7
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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