developeruz/shopping-cart-component

ShoppingCart for Yii2

dev-master 2015-07-26 13:23 UTC

This package is not auto-updated.

Last update: 2024-11-23 16:41:53 UTC


README

Компонент для реализации корзины моделей.

Идея основана на Shopping Cart для Yii 1.x

Корзина - объект контейнер, для хранения коллекции позиций, и методами для работы с этой коллекцией.

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

Установка и настройка

###Установка:

php composer.phar require developeruz/shopping-cart-component "*"

1 вариант: Подключение через конфиг

Добавить:

'components' => [
     'shoppingCart' =>
          [
              'class' => 'developeruz\shopping\EShoppingCart'
          ]
]

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

$cart = Yii::$app->shoppingCart;

2 вариант: Подключение по необходимости

  $cart = Yii::createObject('developeruz\shopping\EShoppingCart');
  $cart->init();

  $book = Books::findOne(1);
  $cart->put($book);

Подготавливаем модель

Модели, которым необходимо дать возможность добавления в корзину, должны реализовать интерфейс IECartPosition:

use developeruz\shopping\IECartPosition;

class Book extends CActiveRecord implements IECartPosition {
    ...
    public function getId()
    {
        return $this->id;
    }

    public function getPrice()
    {
        return $this->price;
    }

    public function getAviable()
    {
        return true;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function getCostWithDiscount($quality)
    {
        if($quality > 10)
            return $quality * $this->getPrice() * 0.75;
        else return $quality * $this->getPrice();
    }
}

API

EShoppingCart::put($position, $quantity)

Добавляет в корзину позицию товара в количестве $quantity. Если позиция товара уже была в корзине, то данные модели обновляются, а количество увеличивается на $quantity

$book = Books::findOne(1);
$cart->put($book); //в корзине 1 позиция с id=1 в количестве 1 единица.
$cart->put($book,2); //в корзине 1 позиция с id=1 в количестве 3 единицы.
$book2 = Books::findOne(2);
$cart->put($book2); //в корзине 2 позиции с id=1 и id=2

EShoppingCart::update($position, $quantity)

Обновляет в корзине позицию товара. Если позиция товара уже была в корзине, то данные модели обновляются, а количество установится в $quantity. Если позиции не было в корзине, то она добавляется в ней. Если установлено $quantity<1, то позиция удаляется из корзины

$book = Books::findOne(1);
$cart->put($book); //в корзине 1 позиция с id=1 в количестве 1 единица.
$cart->update($book,2); //в корзине 1 позиция с id=1 в количестве 2 единицы.

EShoppingCart::remove($key)

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

$book = Books::findOne(1);
$cart->put($book,2); //в корзине 1 позиция с id=1 в количестве 2 единицы.
$cart->remove($book); //в корзине нет позиций

EShoppingCart::clear()

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

$cart->clear();

EShoppingCart::isEmpty()

Возвращает true, если корзина пустая.

if($cart->isEmpty())

EShoppingCart::getCount()

Возвращает количество позиций

$cart->put($book,2);
$cart->put($book2,3);
$cart->getCount(); //2

EShoppingCart::getItemsCount()

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

$cart->put($book,2);
$cart->put($book2,3);
$cart->getItemsCount(); //5

Может принимать в качестве не обязательного параметра позицию.

[php]
$cart->put($book,2);
$cart->put($book2,3);
$cart->getItemsCount($book); //2

EShoppingCart::getCost()

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

$cart->put($book,2); //price=100
$cart->put($book2,1); //price=200
$cart->getCost(); //400

Может принимать в качестве не обязательного параметра позицию. И в этом случаи возвращает стоимость для данной позиции

$cart->put($book,2); //price=100
$cart->put($book2,1); //price=200
$cart->getCost($book); //2*100 = 200

EShoppingCart::getDiscountCost()

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

$cart->put($book,2); //price=100 скидка 25% при покупке 2 шт
$cart->put($book2,1); //price=200
$cart->getDiscountCost(); //350

Может принимать в качестве не обязательного параметра позицию. И в этом случаи возвращает стоимость для данной позиции

$cart->put($book,2); //price=100
$cart->put($book2,1); //price=200
$cart->getDiscountCost($book); //2*100*0.75 = 150

EShoppingCart::getPositions()

Возвращает массив позиций

$positions = $cart->getPositions();
foreach($positions as $position) {
...
}

Каждая позиция содержит следующие данные: item - текстовое обозначение товара, получаемое через $model->getTitle(), quality - количество price - цена за единицу товара ($model->getPrice()) cost - общая стоимость товара cost_with_discount - общая стоимость с учетом скидок

Может принимать в качестве не обязательного параметра позицию.

$positions = $cart->getPositions($book1);