{{TOC up to=3}} ==Введение== Это - современный и независимый от фреймворков пакет корзины покупок; характеризуется поддержкой ((https://cartalyst.com/manual/cart#instances множества экземпляров)), ((https://cartalyst.com/manual/cart#attributes атрибутов товаров)) и ((https://www.cartalyst.com/manual/conditions==условий)). Пакет требует PHP 5.4+ и поставляется в комплекте с фасадом и сервис-провайдером для Laravel 4 для простой интеграции с фреймворком, соответствует стандарту FIG PSR-4 для обеспечения высокого уровня взаимодействия с общим кодом PHP, и полностью покрыт юнит-тестами. Ниже об ((#installation установке)) и о том, как ((#intagration интегрировать его в Laravel 4)). ==Простой пример== ===Добавление одного товара в корзину=== %% Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, ]); %% ===Добавление нескольких товаров в корзину=== %% Cart::add([ [ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, ], [ 'id' => 'sweatshirt', 'name' => 'Sweatshirt', 'quantity' => 1, 'price' => 98.32, ], ]); %% ===Получение всех товаров корзины=== %% $items = Cart::items(); %% ==((#installation)) Установка== Лучший и самый простой способ установить пакет Cart - с помощью ((http://getcomposer.org/==Composer)). ===Подготовка=== Откройте ваш файл %%(t)composer.json%% и добавьте следующее в массив %%(t)require%%: %%(js) "cartalyst/cart": "1.0.*" %% Добавьте следующие строки после массива %%(t)require%% в вашем файле %%(t)composer.json%%: %%(js) "repositories": [ { "type": "composer", "url": "http://packages.cartalyst.com" } ] %% .(alert) **Примечание:** Убедитесь в том, что после внесения изменений в файл %%(t)composer.json%%, он остался валидным, запустив %%(t)composer validate%%. ===Установка зависимостей=== Запустите Composer для установки или обновления новых требований. %%(sh) php composer install %% Или: %%(sh) php composer update %% Теперь вы можете использовать %%require 'vendor/autoload.php';%%, чтобы автоматически загружать пакет. ==((#intagration)) Интеграция== ===Laravel 4=== Пакет Cart поддерживает работу с Laravel 4 и поставляется вместе с сервис-провайдером и фасадом для простой интеграции. После установки пакета откройте ваш файл конфигурации Laravel, находящийся в %%(t)app/config/app.php%%, и добавьте следующие строки. В массив %%(t)$providers%% добавьте следующий сервис-провайдер для этого пакета. %% 'Cartalyst\Cart\Laravel\CartServiceProvider', %% В массив %%(t)$aliases%% добавьте следующий фасад для этого пакета. %% 'Cart' => 'Cartalyst\Cart\Laravel\Facades\Cart', %% ===Конфигурация=== После установки вы можете опубликовать файл конфигурации пакета в вашем приложении, запустив следующую команду в своём терминале: %%(sh) php artisan config:publish cartalyst/cart %% Это опубликует ваш файл конфигурации в %%(t)app/config/packages/cartalyst/cart/config.php%%, где вы можете изменить конфигурацию пакета. ===Интеграция с Laravel=== Интегрировать пакет с фреймворком извне невероятно легко, просто следуйте этому примеру: %% // Включение файла автозагрузки composer require_once 'vendor/autoload.php'; // Импорт необходимых классов use Cartalyst\Cart\Cart; use Cartalyst\Cart\Storage\NativeSession; use Illuminate\Events\Dispatcher; use Illuminate\Filesystem\Filesystem; use Illuminate\Session\FileSessionHandler; use Illuminate\Session\Store; // Требование конфигурационного файла корзины $config = require_once 'vendor/cartalyst/cart/src/config/config.php'; // Создание экземпляра хранилища новой Сессии $fileSessionHandler = new FileSessionHandler(new Filesystem(), __DIR__.'/storage/sessions'); $store = new Store('your_app_session_name', $fileSessionHandler); $session = new NativeSession($store, $config['session_key'], $config['instance']); // Создание экземпляра Корзины и установка необходимой конфигурации $cart = new Cart('cart', $session, new Dispatcher); $cart->setRequiredIndexes($config['requiredIndexes']); %% Интеграция сделана, и теперь вы можете использовать все доступные методы, вот пример: %% // Получение всех товаров корзины $items = $cart->items(); %% .(alert) **Примечание 1:** Убедитесь, что папка %%(t)storage/sessions%% существует, и у web-сервера есть права на запись в неё. Она может быть заменена на другую папку, если потребуется. .(alert) **Примечание 2:** Для сборки мусора вызовите метод %%gc()%% в %%FileSessionHandler%% как %%$fileSessionHandler->gc($lifetime);%%. Вы также можете настроить функцию, которая будет вызывать этот метод случайным образом вместо того, чтобы вызывать его при каждом запросе. ==Использование== В этом разделе мы покажем, как вы можете управлять вашей корзиной для покупок. ===Добавление товара=== Возможность добавления товаров в корзину имеет решающее значение, и мы сделали эту возможность невероятно простой. Вы можете передавать простые или многомерные массивы, и чтобы помочь вам разобраться, ниже мы перечислили все ключи по умолчанию, которые вы можете передавать при добавлении или обновлении элементов корзины. ((#indexes)) %%(hvlraw)
Ключ Обязательный Тип Описание
id да mixed Уникальный идентификатор товара, может быть числовым, артикул (SKU), и т.д.
name да string Название товара.
price да float Цена товара.
quantity да int Количество, должно быть целым и не может быть отрицательным.
attributes нет array Атрибуты товара, такие как размер, цвет, материал, и т.д.
weight нет float Вес товара.
%% .(alert) **Примечание:** Вы можете передавать дополнительные пары %%(t)ключ/значение%% в массив при добавлении или обновлении товара, это можно увидеть в последующих примерах. ====Cart::add()=== %%(hvlraw)
Параметр Обязательный Тип Описание
$item да array Простой или многомерный массив, который соответствует списку ключей, указанному выше.
%% **Добавление одного товара** %% Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, ]); %% **Добавление одного товара с дополнительным ключом** %% Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, 'sku' => 'tshirt-custom', ]); %% **Добавление одного товара с атрибутами и дополнительным ключом** %% Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, 'sku' => 'tshirt-red-large', 'attributes' => [ 'color' => [ 'label' => 'Red', 'value' => 'red', ], 'size' => [ 'label' => 'Large', 'value' => 'l', ], ], ]); %% **Добавление нескольких товаров** %% Cart::add([ [ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, 'sku' => 'tshirt-red-large', 'attributes' => [ 'color' => [ 'label' => 'Red', 'value' => 'red', ], 'size' => [ 'label' => 'Large', 'value' => 'l', ], ], ], [ 'id' => 'sweatshirt', 'name' => 'Sweatshirt', 'quantity' => 1, 'price' => 98.32, ], ]); %% ===Обновление товара=== Обновлять товары так же просто, как и добавлять их. ====Cart::update()=== %%(hvlraw)
Параметр Обязательный Тип Описание
$rowId да string Строковый id элемента.
$data да mixed Это может быть как массив так и целое число, если число, то оно будет обновлять количество этого товара.
%% .(alert) **Примечание:** Если %%$data%% массив, то вам не требуется передавать все ключи, только те, которые вы хотите обновить, такие как %%(t)name%%, %%(t)price%%, %%(t)quantity%%, %%(t)attributes%% и т.д. **Обновление количества товара** %% Cart::update('c14c437bc9ae7d35a7c18ee151c6acc0', 2); %% **Обновление одного товара** %% Cart::update('c14c437bc9ae7d35a7c18ee151c6acc0', [ 'quantity' => 1, 'price' => 12.50, ]); %% **Обновление нескольких товаров** %% Cart::update([ 'c14c437bc9ae7d35a7c18ee151c6acc0' => [ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, ], '63e2d7033fe95b9134a5737503d10ba5' => [ 'id' => 'sweatshirt', 'name' => 'Sweatshirt', 'quantity' => 2, 'price' => 98.32, ], ]); %% ===Удаление товара=== Удалять товары из корзины просто, вы можете удалить один товар за раз или несколько, предоставляя массив, содержащий строковые id, которые вы хотите удалить. ====Cart::remove()=== %%(hvlraw)
Параметр Обязательный Тип Описание
$items да mixed Это может быть как строка, так и массив, содержащий строковые id товаров.
%% **Удаление одного товара** %% Cart::remove('c14c437bc9ae7d35a7c18ee151c6acc0'); %% **Удаление нескольких товаров** %% Cart::remove([ 'c14c437bc9ae7d35a7c18ee151c6acc0', '63e2d7033fe95b9134a5737503d10ba5', ]); %% ===Товары=== Хотите показать товары вашей корзины покупок? У нас всё схвачено! Вы можете перечислить все товары или получить конкретные товары, используя их id. **Получение всех товаров** %% $items = Cart::items(); foreach ($items as $item) { echo $item->price(); } %% **Проверка существования товара** Этот метод наиболее полезен при удалении товаров корзины, вы можете проверить, есть ли товар в корзине, перед тем как удалить его. %% if (Cart::exists('c14c437bc9ae7d35a7c18ee151c6acc0')) { Cart::remove('c14c437bc9ae7d35a7c18ee151c6acc0'); } %% **Получение одного товара** %% $item = Cart::item('c14c437bc9ae7d35a7c18ee151c6acc0'); %% **Получение цены товара** %% $item->price(); %% **Получение количества товара** %% $item->quantity(); %% **Получения подитога по товару** %% $item->subtotal(); %% **Получение веса товара** %% $item->weight(); %% **Получение атрибутов товара** %% $item->attributes(); %% ===Другие методы=== В этом разделе мы рассмотрим все остальные методы, которые не уместились в предыдущих разделах. ====Cart::total()=== Возвращает сумму корзины. %% echo Cart::total(); %% ====Cart::subtotal()=== Возвращает подитог корзины. %% echo Cart::subtotal(); %% ====Cart::quantity()=== Возвращает общее количество товаров в корзине. %% echo Cart::quantity(); %% ====Cart::weight()=== Возвращает общий вес корзины. %% echo Cart::weight(); %% ====Cart::itemsSubtotal()=== Получение подитога товаров корзины. %% echo Cart::itemsSubtotal(); %% ====Cart::clear()=== Очистка корзины. %% Cart::clear(); %% ====Cart::getIdentity()=== Возвращает идентификатор корзины. %% Cart::getIdentity(); %% ====Cart::setIdentity()=== Задаёт идентификатор корзины. %% Cart::setIdentity('my-new-cart-name'); %% ====Cart::sync()=== Этот метод очень полезен, когда вы хотите синхронизировать корзину покупок, которая хранится в БД например. В этом небольшом примере мы используем статический массив. %% $items = [ [ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, ], [ 'id' => 'sweatshirt', 'name' => 'Sweatshirt', 'quantity' => 1, 'price' => 98.32, ], ]; $collection = new Collection($items); Cart::sync($collection); %% ===Метаданные=== Управлять метаданными внутри корзины, такими как информация об оплате и доставке, очень просто. ====Cart::setMetadata()=== Задать метаданные очень легко, просто предоставьте массив с парой ключ/значение и всё. %%(hvlraw)
Параметр Обязательный Тип Описание
$data да array Массив с данными, которые вы хотите прикрепить.
%% %% $data = [ 'shipping_information' => [ 'full_name' => 'John Doe', 'address' => 'Example Street', ], ]; Cart::setMetadata($data); %% ====Cart::getMetadata()=== Получить метаданные, которые вы задали, просто. %%(hvlraw)
Параметр Обязательный Тип Описание
$key нет mixed Ключ метаданных для получения.
%% **Для получения всех доступных метаданных** %% $metadata = Cart::getMetadata(); %% **Для получения метаданных по ключам** %% $metadata = Cart::getMetadata('shipping_information'); %% %% $metadata = Cart::getMetadata('shipping_information.full_name'); %% ====Cart::removeMetadata()=== %%(hvlraw)
Параметр Обязательный Тип Описание
$key нет mixed Ключ метаданных для удаления.
%% **Для удаления всех метаданных** %% Cart::removeMetadata(); %% **Для удаления метаданных по ключам** %% Cart::removeMetadata('shipping_information.full_name'); %% %% Cart::removeMetadata('shipping_information'); %% ===Поиск=== Если вам когда-нибудь понадобится поиск в корзине покупок - у нас, конечно, и здесь всё схвачено. Вы можете использовать одно или несколько свойств для поиска товаров в корзине. ====Cart::find()=== %%(hvlraw)
Параметр Обязательный Тип Описание
$data да array Массив свойств, который вы хотите найти.
%% **Пример 1** Поиск товара, id которого %%(t)foobar%% %% Cart::find([ 'id' => 'foobar', ]); %% **Пример 2** Поиск товара, у которого название %%(t)Foo Bar%% и цена %%(t)5%% %% Cart::find([ 'name' => 'Foo Bar', 'price' => 5, ]); %% **Пример 3** Поиск товаров со следующими атрибутами %% Cart::find([ 'attributes' => [ 'size' => [ 'price' => 5, ], ], ]); %% ===((#attributes)) Атрибуты=== Каждый товар может иметь разные атрибуты, такие как размер, цвет, и вы даже можете добавить цену каждому атрибуту, что будет сказываться на конечной стоимости товара. %%(hvlraw)
Ключ Обязательный Описание
label да Название, которое отображается пользователю.
value да Значение атрибута.
price нет Цена атрибута.
weight нет Вес атрибута.
%% .(alert) **Примечание:** Вы можете передавать дополнительные пары ключ/значение в массиве, смотрите примеры ниже. %% Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, 'attributes' => [ 'size' => [ 'label' => 'Large', 'value' => 'l', 'price' => 5, ], 'color' => [ 'label' => 'Red', 'value' => 'red', ], ], ]); %% ===Коллекции=== Коллекции являются лишь оболочкой для массива объектов, но предлагают кучу своих полезных методов, чтобы помочь вам вытаскивать товары из массива. Ниже мы используем несколько из множества полезных методов, доступных в классе ((https://github.com/laravel/framework/blob/master/src/Illuminate/Support/Collection.php==Collection)) Laravel. ====first()==== Метод %%(t)first()%% может быть использован для получения первого элемента коллекции. Это будет первый элемент, содержащийся во внутреннем массиве коллекции. %% $item = Cart::items()->first(); %% ====last()==== Метод %%(t)last()%% обратный методу %%(t)first()%% и возвращает последний элемент, содержащийся во внутреннем массиве коллекции. %% $item = Cart::items()->last(); %% ====isEmpty()==== Метод %%(t)isEmpty()%% может быть использован для проверки того, содержит ли коллекция элементы или нет. Он не принимает никаких значений и возвращает логическое значение. %% if ( ! Cart::items()->isEmpty()) { echo 'We have items on our cart :)'; } else { echo 'Cart is empty :('; } %% ====count()==== Метод %%(t)count()%% подсчитывает количество элементов в коллекции. %% $total = Cart::items()->count(); %% ===Экземпляры=== Cart поддерживает создание множества экземпляров корзин, поэтому у вас может быть столько экземпляров корзин на одной странице, сколько захотите, без всяких конфликтов. У вас есть два способа добиться этого. Первый - создание сервис-провайдера, предназначенного для регистрации в вашем списке желаний (%%Wishlist%%) всех других ваших экземпляров корзин. Второй способ проще, он заключается в привязке новых экземпляров непосредственно к ((док4:ioc IoC)). ====Привязка к IoC==== %% use Cartalyst\Cart\Cart; use Cartalyst\Cart\Storage\Sessions\IlluminateSession; $app = app(); $app['wishlist'] = $app->share(function($app) { $config = $app['config']->get('cartalyst/cart::config'); $storage = new IlluminateSession($app['session.store'], $config['session_key'], 'wishlist'); return new Cart('wishlist', $storage, $app['events']); }); %% ====Создание вашего сервис-провайдера==== %%(t)app/services/WishlistServiceProvider.php%% %% use Cartalyst\Cart\Cart; use Cartalyst\Cart\Storage\Sessions\IlluminateSession; use Illuminate\Support\ServiceProvider; class WishlistServiceProvider extends ServiceProvider { /** * Регистрация сервис-провайдера. * * @return void */ public function register() { $this->registerSession(); $this->registerCart(); } /** * Регистрация драйвера сессий, используемого Wishlist. * * @return void */ protected function registerSession() { $this->app['wishlist.storage'] = $this->app->share(function($app) { $config = $app['config']->get('cartalyst/cart::config'); return new IlluminateSession($app['session.store'], $config['session_key'], 'wishlist'); }); } /** * Регистрация Wishlist. * * @return void */ protected function registerCart() { $this->app['wishlist'] = $this->app->share(function($app) { return new Cart('wishlist', $app['wishlist.storage'], $app['events']); }); } } %% ====Создание вашего фасада==== %%(t)app/facades/Wishlist.php%% %% use Illuminate\Support\Facades\Facade; class Wishlist extends Facade { protected static function getFacadeAccessor() { return 'wishlist'; } } %% ====Регистрация вашего сервис-провайдера и фасада==== Откройте ваш конфигурационный файл Laravel %%(t)app/config/app.php%% и добавьте следующие строки. В массив %%(t)$providers%% добавьте следующий сервис-провайдер для этого пакета. %% 'Path\To\Your\WishlistServiceProvider', %% В массив %%(t)$aliases%% добавьте следующий фасад для этого пакета. %% 'Wishlist' => 'Path\To\Your\Wishlist', %% ====Использование==== Использование идентично корзине. %% Wishlist::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, ]); %% ===Условия=== Пакет Cart использует пакет Cartalyst Conditions для управления условиями товара и корзины. По умолчанию в Cart заданы три типа условий: %%(t)discount%% (скидка), %%(t)tax%% (налог) и %%(t)other%% (другие условия). ====Условия корзины==== Вы можете передавать в корзину массив, содержащий одно или несколько условий. **Применение одного условия** %% $condition = new Condition([ 'name' => 'VAT (12.5%)', 'type' => 'tax', 'target' => 'subtotal', ]); $condition->setActions([ [ 'value' => '12.5%', ], ]); Cart::condition($condition); %% **Применение нескольких условий** %% $conditionTax = new Condition([ 'name' => 'VAT (12.5%)', 'type' => 'tax', 'target' => 'subtotal', ]); $conditionTax->setActions([ [ 'value' => '12.5%', ], ]); $conditionDiscount = new Condition([ 'name' => 'Discount (2.5%)', 'type' => 'discount', 'target' => 'subtotal', ]); $conditionDiscount->setActions([ [ 'value' => '-2.5%', ], ]); Cart::condition([$conditionTax, $conditionDiscount]); %% ====Условия товара==== Вы можете добавить одно или больше (массив) условий для товара, которые будут назначены автоматически при добавлении или обновлении товаров в корзине. %% $condition = new Condition([ 'name' => 'VAT (12.5%)', 'type' => 'tax', 'target' => 'subtotal', ]); Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, 'conditions' => $condition, ]); %% ====Удаление условий=== Иногда вам понадобиться удалять условия, в этом разделе мы рассмотрим, как удалять конкретные условия или все условия сразу. **Cart::removeConditionByName()** Удаление условия по его названию. %%(hvlraw)
Параметр Обязательный Тип По умолчанию Описание
$name да string null Название условия.
$includeItems нет boolean true Флаг, показывающий надо ли удалять условие для товара или нет.
%% %% Cart::removeConditionByName('Tax 10%'); %% **Cart::removeConditionByType()** Удаление условия по его имени. %%(hvlraw)
Параметр Обязательный Тип По умолчанию Описание
$type да string null Тип условия.
$includeItems нет boolean true Флаг, показывающий надо ли удалять условие для товара или нет.
%% %% Cart::removeConditionByType('tax'); %% **Cart::removeConditions()** Удаление всех условий с указанным идентификатором. %%(hvlraw)
Параметр Обязательный Тип По умолчанию Описание
$id нет mixed null Идентификатор условия.
$includeItems нет boolean true Флаг, показывающий надо ли удалять условие для товара или нет.
$target нет string type Целевой объект, к которому было применено условие.
%% **Удаление условия с типом %%(t)tax%%.** %% Cart::removeConditions('tax'); %% **Удаление всех примененных условий** %% Cart::removeConditions(); %% ====Типы условий=== Типы условий определяются свойством условий "тип". Cart по умолчанию обрабатывает типы условий %%(t)discount%%, %%(t)tax%% и %%(t)other%%. .(alert) **Примечание:** Если вы хотите определить свои типы условий, убедитесь, что вы задали порядок использования условий %%Cart::setConditionsOrder($types)%%, передав ему массив типов, которые должны обрабатываться корзиной, иначе будут применены только типы условий по умолчанию. **Налог** Условию налога должен быть задан тип %%(t)tax%% %% $condition = new Condition([ 'name' => 'VAT (12.5%)', 'type' => 'tax', 'target' => 'subtotal', ]); $condition->setActions([ [ 'value' => '12.5%', ], ]); %% **Скидка** Условию скидки должен быть задан тип %%(t)discount%% %% $condition = new Condition([ 'name' => 'Discount (5%)', 'type' => 'discount', 'target' => 'subtotal', ]); $condition->setActions([ [ 'value' => '-5%', ], ]); %% Это условие будет применять 5% скидку. **Другие** Другим условиям должен быть задан тип %%(t)other%%. Следующее условие будет добавлять 5 к подитогу после применения скидок (если они есть), предполагая, что порядок условий задан по умолчанию. %% $condition = new Condition([ 'name' => 'Other (5%)', 'type' => 'other', 'target' => 'subtotal', ]); $condition->setActions([ [ 'value' => '5', ], ]); %% ====Включённые условия=== Включённые условия не добавляются к итогу, но позволяют вам пересчитывать налоги, которые уже включены в вашу цену. Это условие будет пересчитано и будет влиять на итоги методов условий, но не будет добавлено к итогу корзины. %% $condition = new Condition([ 'name' => 'Tax (5%)', 'type' => 'tax', 'target' => 'subtotal', ]); $condition->setActions([ [ 'value' => '5%', 'inclusive' => true, ], ]); %% ====Порядок условий=== =====Порядок по умолчанию==== 1. %%(t)discount%% 2. %%(t)other%% 3. %%(t)tax%% =====Получение порядка условий корзины==== %% $order = Cart::getConditionsOrder(); %% =====Задание порядка условий корзины==== %% Cart::setConditionsOrder([ 'discount', 'other', 'tax', 'shipping', ]); %% =====Задание порядка условий товаров==== %% Cart::setItemsConditionsOrder([ 'discount', 'other', 'tax', 'shipping', ]); %% .(alert) **Примечание:** Убедитесь, что вы задали порядок условий для товара перед добавлением или обновлением. **Объекты условий** Вы можете применить условия товара, как к цене товара, так и к подитогу. * цена * подитог .(alert) **Примечание 1:** Условия товара всегда применяются до условий корзины. .(alert) **Примечание 2:** Условия товара, касающиеся цены, всегда применяются до условий, касающихся подитога. ====Методы условий=== Применение условия. %% Cart::condition(Cartalyst\Conditions\Condition $condition); %% Получение всех применённых условий. %% Cart::conditions($type|null, bool $includeItems); %% Задание порядка применения условий. %% Cart::setConditionsOrder([ 'discount', 'other', 'tax', ]); %% Задание порядка применения условий к товарам. %% Cart::setItemsConditionsOrder([ 'discount', 'tax', 'shipping', ]); %% Получение всех итогов условий, сгруппированных по типу. %% Cart::conditionsTotal($type); // Возвращает массив результатов переданного типа, включая условия товаров Cart::conditionsTotal($type, false); // Возвращает массив результатов переданного типа, исключая условия товаров Cart::conditionsTotal(); // Возвращает массив результатов всех применённых условий, включая условия товаров Cart::conditionsTotal(null, false); // Возвращает массив результатов всех применённых условий, исключая условия товаров %% Получение суммы всех или конкретных типов условий. %% Cart::conditionsTotalSum($type); // Возвращает сумму условий переданного типа Cart::conditionsTotalSum(); // Возвращает сумму всех условий %% Получение всех условий, применённых только к товарам. %% Cart::itemsConditions(); %% Получение сумм всех или конкретных типов условий товаров, сгруппированных по типам. %% Cart::itemsConditionsTotal($type); // Возвращает массив результатов переданного типа Cart::itemsConditionsTotal(); // Возвращает массив результатов всех применённых условий %% Получение суммы всех или конкретных типов условий товаров. %% Cart::itemsConditionsTotalSum($type); // Возвращает сумму переданного типа Cart::itemsConditionsTotalSum(); // Возвращает сумму всех условий %% ===События=== В этом разделе мы перечислим все события, создаваемые пакетом cart, за которыми вы можете следить. %%(hvlraw)
Событие Параметры Описание
cartalyst.cart.added $item, $cart Событие возникает, когда товар добавлен в корзину.
cartalyst.cart.removed $item, $cart Событие возникает, когда товар удалён из корзины.
cartalyst.cart.update $item, $cart Событие возникает, когда товар обновлён.
cartalyst.cart.cleared $cart Событие возникает, когда корзина очищена.
%% ====Примеры=== Когда товар добавлен в корзину покупок. %% Event::listen('cartalyst.cart.added', function($item, $cart) { // Примените здесь вашу бизнес-логику }); %% Когда товар удалён из корзины покупок. %% Event::listen('cartalyst.cart.removed', function($item, $cart) { // Примените здесь вашу бизнес-логику }); %% Когда товар обновлён в корзине покупок. %% Event::listen('cartalyst.cart.updated', function($item, $cart) { // Примените здесь вашу бизнес-логику }); %% Когда корзина покупок очищена. %% Event::listen('cartalyst.cart.cleared', function($cart) { // Примените здесь вашу бизнес-логику }); %% ===Исключения=== В этом разделе мы приведём список всех исключений, которые создаются пакетом cart. Исключения создаются в пространстве имен %%(t)Cartalyst\Cart\Exceptions%%. %%(hvlraw)
Исключение Описание
CartMissingRequiredIndexException Это исключение возникает, когда требуемый ключ не предоставлен.
CartInvalidQuantityException Это исключение возникает, когда предоставленное количество некорректно.
CartInvalidPriceException Это исключение возникает, когда предоставленная цена некорректна.
CartInvalidAttributesException Это исключение возникает, когда предоставленные атрибуты некорректны или неправильны.
CartItemNotFoundException Это исключение возникает, когда вы запрашиваете несуществующий товар.
%% ====Примеры=== Перехват исключения при добавлении товара в корзину без необходимого ключа. %% try { // Мы не передаём цену Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, ]); } catch (Cartalyst\Cart\Exceptions\CartMissingRequiredIndexException $e) { // Получение недостающего ключа $missingIndex = $e->getMessage(); // Примените здесь вашу бизнес-логику } %% Перехват исключения при добавлении товара с некорректным значением количества. %% try { Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => -1, 'price' => 12.50, ]); } catch (Cartalyst\Cart\Exceptions\CartInvalidQuantityException $e) { // Примените здесь вашу бизнес-логику } %% Перехват исключения при добавлении товара с некорректным значением цены. %% try { Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 'abc', ]); } catch (Cartalyst\Cart\Exceptions\CartInvalidPriceException $e) { // Примените здесь вашу бизнес-логику } %% Перехват исключения при добавлении товара с некорректными атрибутами. %% try { Cart::add([ 'id' => 'tshirt', 'name' => 'T-Shirt', 'quantity' => 1, 'price' => 12.50, 'attributes' => 'abc', ]); } catch (Cartalyst\Cart\Exceptions\CartInvalidAttributesException $e) { // Примените здесь вашу бизнес-логику } %% Перехват исключения при попытке обновления несуществующего товара. %% try { Cart::update('abc', [ 'price' => 20.00, ]); } catch (Cartalyst\Cart\Exceptions\CartItemNotFoundException $e) { // Примените здесь вашу бизнес-логику } %%