Может войдёшь?
Черновики Написать статью Профиль

Использование корзины покупок в Cartalyst

перевод

  1. 1. Введение
  2. 2. Простой пример
    1. 2.1. Добавление одного товара в корзину
    2. 2.2. Добавление нескольких товаров в корзину
    3. 2.3. Получение всех товаров корзины
  3. 3. Установка
    1. 3.1. Подготовка
    2. 3.2. Установка зависимостей
  4. 4. Интеграция
    1. 4.1. Laravel 4
    2. 4.2. Конфигурация
    3. 4.3. Интеграция с Laravel
  5. 5. Использование
    1. 5.1. Добавление товара
    2. 5.2. Обновление товара
    3. 5.3. Удаление товара
    4. 5.4. Товары
    5. 5.5. Другие методы
    6. 5.6. Метаданные
    7. 5.7. Поиск
    8. 5.8. Атрибуты
    9. 5.9. Коллекции
    10. 5.10. Экземпляры
    11. 5.11. Условия
    12. 5.12. События
    13. 5.13. Исключения

Введение

Это — современный и независимый от фреймворков пакет корзины покупок; характеризуется поддержкой множества экземпляров, атрибутов товаров и условий.

Пакет требует PHP 5.4+ и поставляется в комплекте с фасадом и сервис-провайдером для Laravel 4 для простой интеграции с фреймворком, соответствует стандарту FIG PSR-4 для обеспечения высокого уровня взаимодействия с общим кодом PHP, и полностью покрыт юнит-тестами.

Ниже об установке и о том, как интегрировать его в Laravel 4.

Простой пример

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

PHP
Cart::add([
    
'id'       => 'tshirt',
    
'name'     => 'T-Shirt',
    
'quantity' => 1,
    
'price'    => 12.50,
]);

Добавление нескольких товаров в корзину

PHP
Cart::add([

    [
        
'id'       => 'tshirt',
        
'name'     => 'T-Shirt',
        
'quantity' => 1,
        
'price'    => 12.50,
    ],

    [
        
'id'       => 'sweatshirt',
        
'name'     => 'Sweatshirt',
        
'quantity' => 1,
        
'price'    => 98.32,
    ],

]);

Получение всех товаров корзины

PHP
$items Cart::items();

Установка

Лучший и самый простой способ установить пакет Cart — с помощью Composer.

Подготовка

Откройте ваш файл composer.json и добавьте следующее в массив require:

js"cartalyst/cart": "1.0.*"

Добавьте следующие строки после массива require в вашем файле composer.json:

js"repositories": [
    {
        "type": "composer",
        "url": "http://packages.cartalyst.com"
    }
]

Примечание: Убедитесь в том, что после внесения изменений в файл composer.json, он остался валидным, запустив composer validate.

Установка зависимостей

Запустите Composer для установки или обновления новых требований.

shphp composer install

Или:

shphp composer update

Теперь вы можете использовать PHPrequire 'vendor/autoload.php';, чтобы автоматически загружать пакет.

Интеграция

Laravel 4

Пакет Cart поддерживает работу с Laravel 4 и поставляется вместе с сервис-провайдером и фасадом для простой интеграции.

После установки пакета откройте ваш файл конфигурации Laravel, находящийся в app/config/app.php, и добавьте следующие строки.

В массив $providers добавьте следующий сервис-провайдер для этого пакета.

PHP
'Cartalyst\Cart\Laravel\CartServiceProvider',

В массив $aliases добавьте следующий фасад для этого пакета.

PHP
'Cart' => 'Cartalyst\Cart\Laravel\Facades\Cart',

Конфигурация

После установки вы можете опубликовать файл конфигурации пакета в вашем приложении, запустив следующую команду в своём терминале:

shphp artisan config:publish cartalyst/cart

Это опубликует ваш файл конфигурации в app/config/packages/cartalyst/cart/config.php, где вы можете изменить конфигурацию пакета.

Интеграция с Laravel

Интегрировать пакет с фреймворком извне невероятно легко, просто следуйте этому примеру:

PHP
// Включение файла автозагрузки 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']);

Интеграция сделана, и теперь вы можете использовать все доступные методы, вот пример:

PHP
// Получение всех товаров корзины
$items $cart->items();

Примечание 1: Убедитесь, что папка storage/sessions существует, и у web-сервера есть права на запись в неё. Она может быть заменена на другую папку, если потребуется.

Примечание 2: Для сборки мусора вызовите метод PHPgc() в PHPFileSessionHandler как PHP$fileSessionHandler->gc($lifetime);. Вы также можете настроить функцию, которая будет вызывать этот метод случайным образом вместо того, чтобы вызывать его при каждом запросе.

Использование

В этом разделе мы покажем, как вы можете управлять вашей корзиной для покупок.

Добавление товара

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

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

Ключ Обязательный Тип Описание
id да mixed Уникальный идентификатор товара, может быть числовым, артикул (SKU), и т.д.
name да string Название товара.
price да float Цена товара.
quantity да int Количество, должно быть целым и не может быть отрицательным.
attributes нет array Атрибуты товара, такие как размер, цвет, материал, и т.д.
weight нет float Вес товара.

Примечание: Вы можете передавать дополнительные пары ключ/значение в массив при добавлении или обновлении товара, это можно увидеть в последующих примерах.

Cart::add()

Параметр Обязательный Тип Описание
$item да array Простой или многомерный массив, который соответствует списку ключей, указанному выше.

Добавление одного товара

PHP
Cart::add([
    
'id'       => 'tshirt',
    
'name'     => 'T-Shirt',
    
'quantity' => 1,
    
'price'    => 12.50,
]);

Добавление одного товара с дополнительным ключом

PHP
Cart::add([
    
'id'       => 'tshirt',
    
'name'     => 'T-Shirt',
    
'quantity' => 1,
    
'price'    => 12.50,
    
'sku'      => 'tshirt-custom',
]);

Добавление одного товара с атрибутами и дополнительным ключом

PHP
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',
        ],

    ],
]);

Добавление нескольких товаров

PHP
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()

Параметр Обязательный Тип Описание
$rowId да string Строковый id элемента.
$data да mixed Это может быть как массив так и целое число, если число, то оно будет обновлять количество этого товара.

Примечание: Если PHP$data массив, то вам не требуется передавать все ключи, только те, которые вы хотите обновить, такие как name, price, quantity, attributes и т.д.

Обновление количества товара

PHP
Cart::update('c14c437bc9ae7d35a7c18ee151c6acc0'2);

Обновление одного товара

PHP
Cart::update('c14c437bc9ae7d35a7c18ee151c6acc0', [
    
'quantity' => 1,
    
'price'    => 12.50,
]);

Обновление нескольких товаров

PHP
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()

Параметр Обязательный Тип Описание
$items да mixed Это может быть как строка, так и массив, содержащий строковые id товаров.

Удаление одного товара

PHP
Cart::remove('c14c437bc9ae7d35a7c18ee151c6acc0');

Удаление нескольких товаров

PHP
Cart::remove([
    
'c14c437bc9ae7d35a7c18ee151c6acc0',
    
'63e2d7033fe95b9134a5737503d10ba5',
]);

Товары

Хотите показать товары вашей корзины покупок? У нас всё схвачено!

Вы можете перечислить все товары или получить конкретные товары, используя их id.

Получение всех товаров

PHP
$items Cart::items();

foreach (
$items as $item)
{
    echo 
$item->price();
}

Проверка существования товара
Этот метод наиболее полезен при удалении товаров корзины, вы можете проверить, есть ли товар в корзине, перед тем как удалить его.

PHP
if (Cart::exists('c14c437bc9ae7d35a7c18ee151c6acc0'))
{
    
Cart::remove('c14c437bc9ae7d35a7c18ee151c6acc0');
}

Получение одного товара

PHP
$item Cart::item('c14c437bc9ae7d35a7c18ee151c6acc0');

Получение цены товара

PHP
$item->price();

Получение количества товара

PHP
$item->quantity();

Получения подитога по товару

PHP
$item->subtotal();

Получение веса товара

PHP
$item->weight();

Получение атрибутов товара

PHP
$item->attributes();

Другие методы

В этом разделе мы рассмотрим все остальные методы, которые не уместились в предыдущих разделах.

Cart::total()

Возвращает сумму корзины.

PHP
echo Cart::total();

Cart::subtotal()

Возвращает подитог корзины.

PHP
echo Cart::subtotal();

Cart::quantity()

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

PHP
echo Cart::quantity();

Cart::weight()

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

PHP
echo Cart::weight();

Cart::itemsSubtotal()

Получение подитога товаров корзины.

PHP
echo Cart::itemsSubtotal();

Cart::clear()

Очистка корзины.

PHP
Cart::clear();

Cart::getIdentity()

Возвращает идентификатор корзины.

PHP
Cart::getIdentity();

Cart::setIdentity()

Задаёт идентификатор корзины.

PHP
Cart::setIdentity('my-new-cart-name');

Cart::sync()

Этот метод очень полезен, когда вы хотите синхронизировать корзину покупок, которая хранится в БД например.

В этом небольшом примере мы используем статический массив.

PHP
$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()

Задать метаданные очень легко, просто предоставьте массив с парой ключ/значение и всё.

Параметр Обязательный Тип Описание
$data да array Массив с данными, которые вы хотите прикрепить.
PHP
$data = [
    
'shipping_information' => [
        
'full_name' => 'John Doe',
        
'address'   => 'Example Street',
    ],
];

Cart::setMetadata($data);

Cart::getMetadata()

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

Параметр Обязательный Тип Описание
$key нет mixed Ключ метаданных для получения.

Для получения всех доступных метаданных

PHP
$metadata Cart::getMetadata();

Для получения метаданных по ключам

PHP
$metadata Cart::getMetadata('shipping_information');
PHP
$metadata Cart::getMetadata('shipping_information.full_name');

Cart::removeMetadata()

Параметр Обязательный Тип Описание
$key нет mixed Ключ метаданных для удаления.

Для удаления всех метаданных

PHP
Cart::removeMetadata();

Для удаления метаданных по ключам

PHP
Cart::removeMetadata('shipping_information.full_name');
PHP
Cart::removeMetadata('shipping_information');

Поиск

Если вам когда-нибудь понадобится поиск в корзине покупок — у нас, конечно, и здесь всё схвачено.

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

Cart::find()

Параметр Обязательный Тип Описание
$data да array Массив свойств, который вы хотите найти.

Пример 1
Поиск товара, id которого foobar

PHP
Cart::find([

    
'id' => 'foobar',

]);

Пример 2
Поиск товара, у которого название Foo Bar и цена 5

PHP
Cart::find([

    
'name'  => 'Foo Bar',
    
'price' => 5,

]);

Пример 3
Поиск товаров со следующими атрибутами

PHP
Cart::find([

    
'attributes' => [

        
'size' => [
            
'price' => 5,
        ],

    ],

]);

Атрибуты

Каждый товар может иметь разные атрибуты, такие как размер, цвет, и вы даже можете добавить цену каждому атрибуту, что будет сказываться на конечной стоимости товара.

Ключ Обязательный Описание
label да Название, которое отображается пользователю.
value да Значение атрибута.
price нет Цена атрибута.
weight нет Вес атрибута.

Примечание: Вы можете передавать дополнительные пары ключ/значение в массиве, смотрите примеры ниже.

PHP
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',
        ],

    ],

]);

Коллекции

Коллекции являются лишь оболочкой для массива объектов, но предлагают кучу своих полезных методов, чтобы помочь вам вытаскивать товары из массива.

Ниже мы используем несколько из множества полезных методов, доступных в классе Collection Laravel.

first()

Метод first() может быть использован для получения первого элемента коллекции.
Это будет первый элемент, содержащийся во внутреннем массиве коллекции.

PHP
$item Cart::items()->first();

last()

Метод last() обратный методу first() и возвращает последний элемент, содержащийся во внутреннем массиве коллекции.

PHP
$item Cart::items()->last();

isEmpty()

Метод isEmpty() может быть использован для проверки того, содержит ли коллекция элементы или нет. Он не принимает никаких значений и возвращает логическое значение.

PHP
if ( ! Cart::items()->isEmpty())
{
    echo 
'We have items on our cart :)';
}
else
{
    echo 
'Cart is empty :(';
}

count()

Метод count() подсчитывает количество элементов в коллекции.

PHP
$total Cart::items()->count();

Экземпляры

Cart поддерживает создание множества экземпляров корзин, поэтому у вас может быть столько экземпляров корзин на одной странице, сколько захотите, без всяких конфликтов.

У вас есть два способа добиться этого. Первый — создание сервис-провайдера, предназначенного для регистрации в вашем списке желаний (PHPWishlist) всех других ваших экземпляров корзин. Второй способ проще, он заключается в привязке новых экземпляров непосредственно к IoC.

Привязка к IoC

PHP
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']);
});

Создание вашего сервис-провайдера

app/services/WishlistServiceProvider.php

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']);
        });
    }

}

Создание вашего фасада

app/facades/Wishlist.php

PHP
use Illuminate\Support\Facades\Facade;

class 
Wishlist extends Facade {

    protected static function 
getFacadeAccessor()
    {
        return 
'wishlist';
    }

}

Регистрация вашего сервис-провайдера и фасада

Откройте ваш конфигурационный файл Laravel app/config/app.php и добавьте следующие строки.

В массив $providers добавьте следующий сервис-провайдер для этого пакета.

PHP
'Path\To\Your\WishlistServiceProvider',

В массив $aliases добавьте следующий фасад для этого пакета.

PHP
'Wishlist' => 'Path\To\Your\Wishlist',

Использование

Использование идентично корзине.

PHP
Wishlist::add([
        
'id'       => 'tshirt',
        
'name'     => 'T-Shirt',
        
'quantity' => 1,
        
'price'    => 12.50,
]);

Условия

Пакет Cart использует пакет Cartalyst Conditions для управления условиями товара и корзины.

По умолчанию в Cart заданы три типа условий: discount (скидка), tax (налог) и other (другие условия).

Условия корзины

Вы можете передавать в корзину массив, содержащий одно или несколько условий.

Применение одного условия

PHP
$condition = new Condition([
    
'name'   => 'VAT (12.5%)',
    
'type'   => 'tax',
    
'target' => 'subtotal',
]);

$condition->setActions([

    [
        
'value' => '12.5%',
    ],

]);

Cart::condition($condition);

Применение нескольких условий

PHP
$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]);

Условия товара

Вы можете добавить одно или больше (массив) условий для товара, которые будут назначены автоматически при добавлении или обновлении товаров в корзине.

PHP
$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()
Удаление условия по его названию.

Параметр Обязательный Тип По умолчанию Описание
$name да string null Название условия.
$includeItems нет boolean true Флаг, показывающий надо ли удалять условие для товара или нет.
PHP
Cart::removeConditionByName('Tax 10%');

Cart::removeConditionByType()
Удаление условия по его имени.

Параметр Обязательный Тип По умолчанию Описание
$type да string null Тип условия.
$includeItems нет boolean true Флаг, показывающий надо ли удалять условие для товара или нет.
PHP
Cart::removeConditionByType('tax');

Cart::removeConditions()
Удаление всех условий с указанным идентификатором.

Параметр Обязательный Тип По умолчанию Описание
$id нет mixed null Идентификатор условия.
$includeItems нет boolean true Флаг, показывающий надо ли удалять условие для товара или нет.
$target нет string type Целевой объект, к которому было применено условие.

Удаление условия с типом tax.

PHP
Cart::removeConditions('tax');

Удаление всех примененных условий

PHP
Cart::removeConditions();

Типы условий

Типы условий определяются свойством условий «тип».

Cart по умолчанию обрабатывает типы условий discount, tax и other.

Примечание: Если вы хотите определить свои типы условий, убедитесь, что вы задали порядок использования условий PHPCart::setConditionsOrder($types), передав ему массив типов, которые должны обрабатываться корзиной, иначе будут применены только типы условий по умолчанию.

Налог
Условию налога должен быть задан тип tax

PHP
$condition = new Condition([
    
'name'   => 'VAT (12.5%)',
    
'type'   => 'tax',
    
'target' => 'subtotal',
]);

$condition->setActions([

    [
        
'value' => '12.5%',
    ],

]);

Скидка
Условию скидки должен быть задан тип discount

PHP
$condition = new Condition([
    
'name'   => 'Discount (5%)',
    
'type'   => 'discount',
    
'target' => 'subtotal',
]);

$condition->setActions([

    [
        
'value' => '-5%',
    ],

]);

Это условие будет применять 5% скидку.

Другие
Другим условиям должен быть задан тип other.

Следующее условие будет добавлять 5 к подитогу после применения скидок (если они есть), предполагая, что порядок условий задан по умолчанию.

PHP
$condition = new Condition([
    
'name'   => 'Other (5%)',
    
'type'   => 'other',
    
'target' => 'subtotal',
]);

$condition->setActions([

    [
        
'value' => '5',
    ],

]);

Включённые условия

Включённые условия не добавляются к итогу, но позволяют вам пересчитывать налоги, которые уже включены в вашу цену.

Это условие будет пересчитано и будет влиять на итоги методов условий, но не будет добавлено к итогу корзины.

PHP
$condition = new Condition([
    
'name'   => 'Tax (5%)',
    
'type'   => 'tax',
    
'target' => 'subtotal',
]);

$condition->setActions([

    [
        
'value'     => '5%',
        
'inclusive' => true,
    ],

]);

Порядок условий

Порядок по умолчанию
  1. discount
  2. other
  3. tax
Получение порядка условий корзины
PHP
$order Cart::getConditionsOrder();
Задание порядка условий корзины
PHP
Cart::setConditionsOrder([
    
'discount',
    
'other',
    
'tax',
    
'shipping',
]);
Задание порядка условий товаров
PHP
Cart::setItemsConditionsOrder([
    
'discount',
    
'other',
    
'tax',
    
'shipping',
]);

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

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

  • цена
  • подитог

Примечание 1: Условия товара всегда применяются до условий корзины.

Примечание 2: Условия товара, касающиеся цены, всегда применяются до условий, касающихся подитога.

Методы условий

Применение условия.

PHP
Cart::condition(Cartalyst\Conditions\Condition $condition);

Получение всех применённых условий.

PHP
Cart::conditions($type|nullbool $includeItems);

Задание порядка применения условий.

PHP
Cart::setConditionsOrder([
    
'discount',
    
'other',
    
'tax',
]);

Задание порядка применения условий к товарам.

PHP
Cart::setItemsConditionsOrder([
    
'discount',
    
'tax',
    
'shipping',
]);

Получение всех итогов условий, сгруппированных по типу.

PHP
Cart::conditionsTotal($type);  // Возвращает массив результатов переданного типа, включая условия товаров

Cart::conditionsTotal($typefalse);  // Возвращает массив результатов переданного типа, исключая условия товаров

Cart::conditionsTotal();  // Возвращает массив результатов всех применённых условий, включая условия товаров

Cart::conditionsTotal(nullfalse);  // Возвращает массив результатов всех применённых условий, исключая условия товаров

Получение суммы всех или конкретных типов условий.

PHP
Cart::conditionsTotalSum($type); // Возвращает сумму условий переданного типа

Cart::conditionsTotalSum(); // Возвращает сумму всех условий

Получение всех условий, применённых только к товарам.

PHP
Cart::itemsConditions();

Получение сумм всех или конкретных типов условий товаров, сгруппированных по типам.

PHP
Cart::itemsConditionsTotal($type); // Возвращает массив результатов переданного типа

Cart::itemsConditionsTotal(); // Возвращает массив результатов всех применённых условий

Получение суммы всех или конкретных типов условий товаров.

PHP
Cart::itemsConditionsTotalSum($type); // Возвращает сумму переданного типа

Cart::itemsConditionsTotalSum(); // Возвращает сумму всех условий

События

В этом разделе мы перечислим все события, создаваемые пакетом cart, за которыми вы можете следить.

Событие Параметры Описание
cartalyst.cart.added $item, $cart Событие возникает, когда товар добавлен в корзину.
cartalyst.cart.removed $item, $cart Событие возникает, когда товар удалён из корзины.
cartalyst.cart.update $item, $cart Событие возникает, когда товар обновлён.
cartalyst.cart.cleared $cart Событие возникает, когда корзина очищена.

Примеры

Когда товар добавлен в корзину покупок.

PHP
Event::listen('cartalyst.cart.added', function($item$cart)
{
    
// Примените здесь вашу бизнес-логику
});

Когда товар удалён из корзины покупок.

PHP
Event::listen('cartalyst.cart.removed', function($item$cart)
{
    
// Примените здесь вашу бизнес-логику
});

Когда товар обновлён в корзине покупок.

PHP
Event::listen('cartalyst.cart.updated', function($item$cart)
{
    
// Примените здесь вашу бизнес-логику
});

Когда корзина покупок очищена.

PHP
Event::listen('cartalyst.cart.cleared', function($cart)
{
    
// Примените здесь вашу бизнес-логику
});

Исключения

В этом разделе мы приведём список всех исключений, которые создаются пакетом cart.

Исключения создаются в пространстве имен Cartalyst\Cart\Exceptions.

Исключение Описание
CartMissingRequiredIndexException Это исключение возникает, когда требуемый ключ не предоставлен.
CartInvalidQuantityException Это исключение возникает, когда предоставленное количество некорректно.
CartInvalidPriceException Это исключение возникает, когда предоставленная цена некорректна.
CartInvalidAttributesException Это исключение возникает, когда предоставленные атрибуты некорректны или неправильны.
CartItemNotFoundException Это исключение возникает, когда вы запрашиваете несуществующий товар.

Примеры

Перехват исключения при добавлении товара в корзину без необходимого ключа.

PHP
try
{
    
// Мы не передаём цену
    
Cart::add([
        
'id'       => 'tshirt',
        
'name'     => 'T-Shirt',
        
'quantity' => 1,
    ]);
}
catch (
Cartalyst\Cart\Exceptions\CartMissingRequiredIndexException $e)
{
    
// Получение недостающего ключа
    
$missingIndex $e->getMessage();

    
// Примените здесь вашу бизнес-логику
}

Перехват исключения при добавлении товара с некорректным значением количества.

PHP
try
{
    
Cart::add([
        
'id'       => 'tshirt',
        
'name'     => 'T-Shirt',
        
'quantity' => -1,
        
'price'    => 12.50,
    ]);
}
catch (
Cartalyst\Cart\Exceptions\CartInvalidQuantityException $e)
{
    
// Примените здесь вашу бизнес-логику
}

Перехват исключения при добавлении товара с некорректным значением цены.

PHP
try
{
    
Cart::add([
        
'id'       => 'tshirt',
        
'name'     => 'T-Shirt',
        
'quantity' => 1,
        
'price'    => 'abc',
    ]);
}
catch (
Cartalyst\Cart\Exceptions\CartInvalidPriceException $e)
{
    
// Примените здесь вашу бизнес-логику
}

Перехват исключения при добавлении товара с некорректными атрибутами.

PHP
try
{
    
Cart::add([
        
'id'         => 'tshirt',
        
'name'       => 'T-Shirt',
        
'quantity'   => 1,
        
'price'      => 12.50,
        
'attributes' => 'abc',
    ]);
}
catch (
Cartalyst\Cart\Exceptions\CartInvalidAttributesException $e)
{
    
// Примените здесь вашу бизнес-логику
}

Перехват исключения при попытке обновления несуществующего товара.

PHP
try
{
    
Cart::update('abc', [
        
'price' => 20.00,
    ]);
}
catch (
Cartalyst\Cart\Exceptions\CartItemNotFoundException $e)
{
    
// Примените здесь вашу бизнес-логику
}

Как вы считаете, полезен ли этот материал? Да Нет

Комментарии (3)

Arat

Спасибо, очень полезно!
Но есть некоторые вопросы.

Обновление количества товара
Cart::update('c14c437bc9ae7d35a7c18ee151c6acc0', 2);

Первый параметр — это что такое? Откуда берется этот идентификатор?

cioxideru

class ItemCollection{
public function setPrice($price){
$this->put('price', (float) $price);

Только посмотрите на код этого пакета.
Не вздумайте использовать этот пакет, абсолютный не профессионализм разработчиков.

cioxideru

крайне не советую использовать любые пакеты «рукожопов» cartalyst

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.