{{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)
{
// Примените здесь вашу бизнес-логику
}
%%