developeruz / shopping-cart-component
ShoppingCart for Yii2
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-14 15:52:54 UTC
README
实现购物车模型的组件。
该想法基于 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);