Версия: 6.x
burger close
Класс Cart

Подробное описание

Корзина пользователя. Хранится в базе данных, привязана к пользователю по идентификатору сессии. В сессии кэшируются общие данные о корзине. Данный класс также используется для работы с корзиной оформленного заказа.

Открытые члены

 getItems ()
 
 setOrder (Orm\Order $order=null)
 
 loadCart ()
 
 updateOrderItems (array $items)
 
 cleanCache ()
 
 cleanInfoCache ()
 
 getCartItemsByType ($type=null)
 
 enableAffiliateRestrictions ($bool)
 
 getCartUserId ()
 
 prepareMultiOffersInfo ($product_id, $multioffers)
 
 exists ($id, $offer=null, $multioffers=null, $concomitants=null, $type=self::TYPE_PRODUCT, $additional_uniq=null)
 
 update ($products=[], $coupon=null, $safe=true, $manual=false)
 
 removeItem ($uniq, $manual=false)
 
 clean ()
 
 mergeEqual ()
 
 getPriceItemsData ($use_currency=true)
 
 getTotalWithoutDelivery ($use_currency=true)
 
 addDeliveryData ($result, $use_currency)
 
 makeOrderCart ()
 
 saveOrderData ()
 
 getOrderProfit ()
 
 getOrderData ($format=true, $use_currency=true, $write_currency_liter=true)
 
 getTotalWeight ($weight_unit=null)
 
 getCustomOrderPrice (array $excludeTypesOfItem=[], $use_currency=true)
 
 setCustomAmountChecker ($callback)
 
 getCustomAmountChecker ()
 
 runAmountChecker ($result, $amount, $item, $n)
 
 getCouponItems ()
 
 getCouponUsedTimesByCurrentUser (Discount $coupon)
 
 addUserError ($message, $can_checkout=true, $key=null)
 
 getUserError ($key)
 
 cleanUserError ($key=null)
 
 getOrder ()
 
 triggerChangeEvent (bool $update_items=true)
 
 getMode ()
 
 getCartId ()
 
 __set ($name, $value)
 
 __get ($name)
 
 __isset ($name)
 
 __unset ($name)
 

Открытые статические члены

static currentCart ()
 
static preOrderCart (Orm\Order $order=null)
 
static emptyCart (Orm\Order $order)
 
static orderCart (Orm\Order $order)
 
static userCart ($session_id, $site_id=null, $cart_mode=self::MODE_SESSION, $cart_id=0)
 
static destroy ()
 
static deleteExpiredCartItems ()
 
static getCurrentInfo ($format=true, $use_currency=true)
 
static evenlyAllocateTheSum (float $sum, array $items)
 
static correctDiscountSumByAmount ($discount_sum, $amount)
 
static getGlobalCartId ()
 
static setGlobalCartId ($cart_id)
 

Поля данных

const CART_SESSION_VAR = 'cart'
 
const MODE_SESSION = 'session'
 
const MODE_PREORDER = 'preorder'
 
const MODE_ORDER = 'order'
 
const MODE_EMPTY = 'order'
 
const CART_ITEM_KEY = 'cartitem'
 
const TYPE_PRODUCT = 'product'
 
const TYPE_COUPON = 'coupon'
 
const TYPE_COMMISSION = 'commission'
 
const TYPE_TAX = 'tax'
 
const TYPE_ORDER_DISCOUNT = 'order_discount'
 
const TYPE_SUBTOTAL = 'subtotal'
 
const TYPE_DELIVERY = 'delivery'
 
const ITEM_EXTRA_KEY_ADDITIONAL_UNIQUE = 'additional_uniq'
 
const ITEM_EXTRA_KEY_SOURCE = 'source'
 
const CART_SOURCE_REPEAT_ORDER = 'repeat_order'
 
const DISCOUNT_SOURCE_OLD_COST = 'old_cost'
 
const SESSION_CART_PRODUCTS = 'cart_products'
 

Защищенные члены

 __construct ($mode=self::MODE_SESSION, Orm\Order $order=null, $session_id=null, $site_id=null, $cart_id=null)
 
 generateId ()
 
 getPaymentCommissionValue ($price, $commission_percent)
 
 addPaymentCommissionData ($result, $use_currency=true)
 
 addOrderDiscountData ($result, $use_currency)
 
 appendUserErrors ($result)
 
 correctAmount (Product $product, float $amount,?int $offer)
 
 getFlagPreventChangeEvent ()
 
 setFlagPreventChangeEvent ($value=true)
 

Защищенные данные

 $mode
 
 $order
 
 $cartitem
 
 $user_errors = []
 
 $select_expression = []
 
 $order_expression
 
 $session_id
 
 $site_id
 
 $cache_coupons
 
 $cache_commission
 
 $cache_products
 
 $cache_products_with_concomitants
 
 $items = []
 
 $order_items = []
 
 $prevent_change_event = false
 
 $first_cart_data_call = true
 
 $enable_affiliate_restrictions = true
 
 $options = []
 
 $cart_id
 

Статические защищенные данные

static $instance
 

Конструктор(ы)

__construct (   $mode = self::MODE_SESSION,
Orm\Order  $order = null,
  $session_id = null,
  $site_id = null,
  $cart_id = null 
)
protected

Получать экземпляр класса можно только через ::currentCart()

Аргументы
string$modeрежим работы корзины. см константы self::MODE_....
Orm\Order | null$orderобъект заказа, если корзина создается из заказа
integer | null$session_idID сессии корзины
integer | null$site_idID сайта
integer | null$cart_id

Методы

__get (   $name)

Возвращает значение произвольного свойства

Аргументы
string$nameИдентификатор свойства
Возвращает
mixed
__isset (   $name)

Возвращает true, если произвольное свойство существует (было задано)

Аргументы
string$nameИдентификатор свойства
Возвращает
bool
__set (   $name,
  $value 
)

Устанавливает значение произвольного свойства

Аргументы
string$nameИдентификатор свойства
Возвращает
mixed
__unset (   $name)

Удаляет произвольное свойство

Аргументы
string$nameИдентификатор свойства
Возвращает
void
addDeliveryData (   $result,
  $use_currency 
)

Добавляет сведения о доставке в корзину

Аргументы
array$result
bool$use_currency
Возвращает
array
addOrderDiscountData (   $result,
  $use_currency 
)
protected

Добавляет к результату информацию о скидках на заказ

Аргументы
array$result- массив со сведениями о корзине
bool$use_currency- использовать ли текущую валюту?
Возвращает
array|void
addPaymentCommissionData (   $result,
  $use_currency = true 
)
protected

Добавляет сведения о комиссии в корзине

Аргументы
mixed$result
bool$use_currency- Если true, то использовать текущую валюту, иначе используется базовая валюта
Возвращает
mixed
addUserError (   $message,
  $can_checkout = true,
  $key = null 
)

Добавляет ошибки к корзине

Аргументы
string$message
bool$can_checkout
mixed$key
Возвращает
Cart
appendUserErrors (   $result)
protected

Добавляет пользовательские ошибки к результату $result

Аргументы
array$result- массив со сведениями
Возвращает
array
clean ( )

Очищает корзину

Возвращает
bool
cleanCache ( )

Очищает кэш товаров корзины

Возвращает
$this
cleanInfoCache ( )

Очищает кэшированные сведения о сумме и количестве товаров в корзине

Возвращает
void
cleanUserError (   $key = null)

Удаляет одну по ключу или все пользовательские ошибки

Аргументы
mixed$key
Возвращает
Cart
correctAmount ( Product  $product,
float  $amount,
?int  $offer 
)
protected

Возвращает откорректированное количество товара

Аргументы
Product$product- объект товара
int$offer- комплектация
float$amount- исходное количество
Возвращает
float
static correctDiscountSumByAmount (   $discount_sum,
  $amount 
)
static

Возвращает сумму скидки, скорректированную относительно количества товаров

Аргументы
float$discount_sum- сумма скидки
float$amount- количество товара
Возвращает
float
static currentCart ( )
static

Возвращает объект корзины текущего пользователя.

Возвращает
Cart
static deleteExpiredCartItems ( )
static

Очистка всех истекших по времени корзин

Возвращает
void
static destroy ( )
static

Уничтожает загруженный экземпляр корзины. Означает, что при следующем вызове ::currentCart() будет произведена загрузка из базы заново

Возвращает
void
static emptyCart ( Orm\Order  $order)
static

Возвращает пустую корзину

Аргументы
Orm\Order$order
Возвращает
cart
enableAffiliateRestrictions (   $bool)

Включает или выключает установку ограничений по остаткам для филиалов. В случае запросов по API, иногда нужно отключать лимит по филиалам, т.к. филиал может неточно устанавливаться

Аргументы
bool$bool
static evenlyAllocateTheSum ( float  $sum,
array  $items 
)
static

Равномерно распределяет указанную сумму между элементами

Аргументы
float$sum
float[]$items
Возвращает
float[]
exists (   $id,
  $offer = null,
  $multioffers = null,
  $concomitants = null,
  $type = self::TYPE_PRODUCT,
  $additional_uniq = null 
)

Проверяет существование элемента в корзине. Возвращает уникальный идентификатор позиции в корзине или false

Аргументы
mixed$id
integer$offer- комплектация
array$multioffers- многомерная комплектация
array$concomitants- сопутствующие товары
string$type- тип позиции в корзине
string$additional_uniq- дополнительный идентификатор
Возвращает
string|bool
Исключения
RSException
generateId ( )
protected

Генерирует уникальный в рамках пользователя id позиции в корзине

Возвращает
string
getCartId ( )

Возвращает идентификатор корзины пользователя, у текущего объекта

Возвращает
int
getCartItemsByType (   $type = null)

Возвращает элементы корзины по типу

Аргументы
string | null$typeЕсли Type - null, то возвращаются элементы всех типов
Возвращает
CartItem[]
getCartUserId ( )

Возвращает id пользователя, которому принадлежит корзина

Возвращает
int|null
getCouponItems ( )

Возвращает объекты купонов на скидку

Возвращает
array
Исключения
RSException
getCouponUsedTimesByCurrentUser ( Discount  $coupon)

Получает сколько раз был использован купон, текущим авторизованным пользователем

Аргументы
Discount$coupon- объект купона
Возвращает
mixed
Исключения
DbException
RSException
static getCurrentInfo (   $format = true,
  $use_currency = true 
)
static

Возвращает информацию по количеству товаров и стоимости товаров в корзине

Аргументы
mixed$format- форматировать общую сумму заказа
mixed$use_currency- если true, то использовать текущую валюту, иначе используется базовая валюта
Возвращает
array
Исключения
RSException
getCustomAmountChecker ( )

Возвращает произвольный обработчик для контроля за остатком

Возвращает
callback | null
getCustomOrderPrice ( array  $excludeTypesOfItem = [],
  $use_currency = true 
)

Возвращает стоимость заказа

Аргументы
array$excludeTypesOfItem- массив элементов из констант self::TYPE_...., с помощью которого можно исключить из расчета различные компоненты заказа
bool$use_currency
Возвращает
float
Исключения
RSException
getFlagPreventChangeEvent ( )
protected

Возвращает флаг, запрещающий вызов события "изменения в корзине"

Возвращает
bool
static getGlobalCartId ( )
static

Возвращает глобальный идентификатор корзины пользователя

Возвращает
int
getItems ( )

Возвращает все элементы корзины

Возвращает
AbstractCartItem[]
getMode ( )

Возвращает режим работы корзины

Возвращает
string
getOrder ( )

Возвращает объект заказа, которому принадлежит корзина

Возвращает
Order
getOrderData (   $format = true,
  $use_currency = true,
  $write_currency_liter = true 
)

Возвращает сведения об элементах заказа. Сведения не зависят от существования в магазине реальных элементов заказа.

Аргументы
bool$format- если true, то форматировать вывод
bool$use_currency- если true, то конвертировать в валюту заказа
bool$write_currency_liter- если true, то отображать символ валюты после суммы
Возвращает
array
getOrderProfit ( )

Возвращает доходность товаров в заказе

Возвращает
double
getPaymentCommissionValue (   $price,
  $commission_percent 
)
protected

Возвращает наценку на цену $price

Аргументы
float$price- сумма
integer$commission_percent- процент комиссии
Возвращает
float
getPriceItemsData (   $use_currency = true)

Возвращает данные по товарам, налогам и скидкам в корзине

Аргументы
bool$use_currency- Если true, то использовать текущую валюту, иначе используется базовая валюта
Возвращает
array
Исключения
RSException
getTotalWeight (   $weight_unit = null)

Возвращает общий вес элементов корзины

Аргументы
null | string$weight_unit- идентификатор единицы измерения, в которй нужно получить вес (соотношение к граммам)
Возвращает
integer
Исключения
RSException
getTotalWithoutDelivery (   $use_currency = true)

Возвращает стоимость товаров в заказе

Аргументы
bool$use_currency- Если true, то использовать текущую валюту, иначе используется базовая валюта
Возвращает
float
Исключения
RSException
getUserError (   $key)

Возвращает массив с ошибкой по ключу

Аргументы
string$key- ключ в массиве ошибок
Возвращает
boolean
loadCart ( )

Загружает корзину из базы данных

Возвращает
void
makeOrderCart ( )

Переносит элементы из корзины в таблицу элементов заказа Вызывается при подтверждении заказа

Возвращает
bool
Исключения
RSException
mergeEqual ( )

Объединяет одинаковые товары с одинаковой комплектацией, увеличивая количество.

Возвращает
void
Исключения
DbException
RSException
static orderCart ( Orm\Order  $order)
static

Возвращает корзину оформленного заказа.

Аргументы
Orm\Order$order
Возвращает
cart
static preOrderCart ( Orm\Order  $order = null)
static

Возвращает корзину пользователя во время оформления заказа. т.е. элементы корзины еще привязаны к сессии, но к ним уже добавляются сведения из заказа (налоги, доставка)

Аргументы
Orm\Order$order
Возвращает
cart
prepareMultiOffersInfo (   $product_id,
  $multioffers 
)

Подготавливает дополнительную информацию уточняя детали многомерных комплектаций Возвращет подготовленный двумерный массив с ключами id,title для каждой комплектации

Аргументы
integer$product_id- id товара
array$multioffers- массив с мультикомплектациями полученными из запроса, ключи в нём id характеристики
Возвращает
array
removeItem (   $uniq,
  $manual = false 
)

Удаляет позицию из корзины.

Аргументы
string$uniq- Уникальный идентификатор элемента корзины
bool$manual- операция вызвана пользователем
Возвращает
bool
Исключения
RSException
runAmountChecker (   $result,
  $amount,
  $item,
  $n 
)

Выполняет проверку наличия товара с учетом всех параметров

Аргументы
array$resultМассив с результатом getCartData
integer$amountКоличество товара
array$itemМассив с товаром и элементом cartItem
string$nУникальный идентификатор позиции в корзине
Возвращает
array Возвращает модифицированный $result
saveOrderData ( )

Сохраняет сформированный заказ в базу данных

Возвращает
bool
setCustomAmountChecker (   $callback)

Устанавливает произвольный обработчик для контроля за остатком товара

Аргументы
callback$callback
setFlagPreventChangeEvent (   $value = true)
protected

Устанавливает флаг, запрещающий вызов события "изменения в корзине"

Аргументы
bool$value
Возвращает
void
static setGlobalCartId (   $cart_id)
static

Устанавливает глобальный идентификатор корзины пользователя. Будет использоваться, если при создании корзины явно не будет указан ИД Корзины

Аргументы
integer$cart_id
setOrder ( Orm\Order  $order = null)

Устанавливает объект заказа в режиме PREORDER

Аргументы
Orm\Order$order
Возвращает
Cart
triggerChangeEvent ( bool  $update_items = true)

Вызывает событие "изменения в корзине", обновляет содержимое корзины при изменении, предотвращает циклический вызов себя

Аргументы
bool$update_items- обновить товарные позиции в БД
Возвращает
void
Исключения
RSException
update (   $products = [],
  $coupon = null,
  $safe = true,
  $manual = false 
)

Обновляет информацию в корзине

Аргументы
array$products- новые сведения по товарам
string$coupon- код купона на скидку
bool$safe- если true, то цена, скидка и наименование товара в $products будет игнорироваться
bool$manual- операция вызвана пользователем
Возвращает
bool | false
Исключения
DbException
RSException
updateOrderItems ( array  $items)

Обновляет сведения об элементах заказа.

Аргументы
Orm\OrderItem[]$items - массив элементов заказа
Возвращает
void
Исключения
RSException
static userCart (   $session_id,
  $site_id = null,
  $cart_mode = self::MODE_SESSION,
  $cart_id = 0 
)
static

Возвращает корзину конкретного пользователя по ID его сессии

Аргументы
string$session_id- ID сессии корзины
int$site_id- ID сайта
string$cart_mode- режим корзины
integer | null$cart_id- ID корзины, 0 - корзина по умолчанию
Возвращает
Cart

Поля

$cache_commission
protected
$cache_coupons
protected
$cache_products
protected
$cache_products_with_concomitants
protected
$cart_id
protected
$cartitem
protected
$enable_affiliate_restrictions = true
protected
$first_cart_data_call = true
protected
$instance
staticprotected
$items = []
protected
$mode
protected
$options = []
protected
$order
protected
$order_expression
protected
$order_items = []
protected
$prevent_change_event = false
protected
$select_expression = []
protected
$session_id
protected
$site_id
protected
$user_errors = []
protected
const CART_ITEM_KEY = 'cartitem'
const CART_SESSION_VAR = 'cart'
const CART_SOURCE_REPEAT_ORDER = 'repeat_order'
const DISCOUNT_SOURCE_OLD_COST = 'old_cost'
const ITEM_EXTRA_KEY_ADDITIONAL_UNIQUE = 'additional_uniq'
const ITEM_EXTRA_KEY_SOURCE = 'source'
const MODE_EMPTY = 'order'
const MODE_ORDER = 'order'
const MODE_PREORDER = 'preorder'
const MODE_SESSION = 'session'
const SESSION_CART_PRODUCTS = 'cart_products'
const TYPE_COMMISSION = 'commission'
const TYPE_COUPON = 'coupon'
const TYPE_DELIVERY = 'delivery'
const TYPE_ORDER_DISCOUNT = 'order_discount'
const TYPE_PRODUCT = 'product'
const TYPE_SUBTOTAL = 'subtotal'
const TYPE_TAX = 'tax'