developeruz/shopping-cart-component

ShoppingCart for Yii2

安装: 39

依赖项: 0

建议者: 0

安全: 0

星标: 2

关注者: 2

分支: 35

公开问题: 1

类型:yii2-extension

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

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);