developeruz / shopping-cart-component
ShoppingCart for Yii2
Installs: 39
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 35
Open Issues: 1
Type:yii2-extension
Requires
- yiisoft/yii2: *
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);