手枪88 / yii2-cart
yii2-cart 是一个简单的购物车模块,用于收集实现购物车接口的应用程序模型 + 小部件
dev-master
2017-04-24 06:03 UTC
Requires
- php: >=5.4.0
- yiisoft/yii2: *
- yiisoft/yii2-bootstrap: *
This package is auto-updated.
Last update: 2024-08-27 21:52:48 UTC
README
模块的开发始于2017年4月24日,请在此处查看:[dvizh/yii2-cart](https://github.com/dvizh/yii2-cart)。建议从 Dvizh 的仓库安装模块,那里有最新版本。
Yii2-cart
这是为 Yii2 框架设计的购物车模块。允许将任何实现 pistol88\cart\interfaces\CartElement 接口的模型添加到购物车中
要添加订单功能,可以使用此模块:[pistol88/yii2-order](https://github.com/pistol88/yii2-order)。
安装
执行以下命令
php composer require pistol88/yii2-cart "*"
或将其添加到 composer.json 中
"pistol88/yii2-cart": "*",
然后执行
php composer update
接下来,迁移数据库
php yii migrate --migrationPath=vendor/pistol88/yii2-cart/migrations
连接和设置
在应用程序配置文件中添加 cart 组件
'components' => [ 'cart' => [ 'class' => 'pistol88\cart\Cart', 'currency' => 'р.', //Валюта 'currencyPosition' => 'after', //after или before (позиция значка валюты относительно цены) 'priceFormat' => [2,'.', ''], //Форма цены ], //... ]
和模块(如果您想使用小部件)
'modules' => [ 'cart' => [ 'class' => 'pistol88\cart\Module', ], //... ]
使用
可以通过组件自行添加到购物车元素,也可以使用现成的小部件。以下是一个将商品添加到购物车的示例动作
//use... class ProductController extends Controller { public function actionAddToCart($id) { //Любая модель $model = $this->findModel($id); //Кладем ее в корзину (в количестве 1, без опций) $cartElement = yii::$app->cart->put($model, 1, []); } }
可以将任何实现 CartElement 接口的模型放入购物车中。以下是一个示例模型
//... class Product extends ActiveRecord implements \pistol88\cart\interfaces\CartElement { //.. public function getCartId() { return $this->id; } public function getCartName() { return $this->name; } public function getCartPrice() { return $this->price; } //Опции продукта для выбора при добавлении в корзину public function getCartOptions() { return [ '1' => [ 'name' => 'Цвет', 'variants' => ['1' => 'Красный', '2' => 'Белый', '3' => 'Синий'], ], '2' => [ 'name' => 'Размер', 'variants' => ['4' => 'XL', '5' => 'XS', '6' => 'XXL'], ] ]; } //.. }
获取购物车元素
//... $elements = yii::$app->cart->elements;
小部件
该模块包含几个小部件。它们都使用 Ajax。
<?php use pistol88\cart\widgets\BuyButton; use pistol88\cart\widgets\TruncateButton; use pistol88\cart\widgets\CartInformer; use pistol88\cart\widgets\ElementsList; use pistol88\cart\widgets\DeleteButton; use pistol88\cart\widgets\ChangeCount; use pistol88\cart\widgets\ChangeOptions; ?> <?php /* Выведет кнопку покупки */ ?> <?= BuyButton::widget([ 'model' => $model, 'text' => 'Заказать', 'htmlTag' => 'a', 'cssClass' => 'custom_class' ]) ?> <?php /* Выведет количество товаров и сумму заказа */ ?> <?= CartInformer::widget(['htmlTag' => 'a', 'offerUrl' => '/?r=cart', 'text' => '{c} на {p}']); ?> <?php /* Выведет кнопку очистки корзины */ ?> <?= TruncateButton::widget(); ?> <?php /* Выведет корзину с выпадающими или обычными ('type' => ElementsList::TYPE_FULL) элементами списка. Можно передать перечень дополнительных полей через otherFields (['Остаток' => 'amount']). */ ?> <?=ElementsList::widget(['type' => ElementsList::TYPE_DROPDOWN]);?> <?php /* Выведет кнопку удаления элемента */ ?> <?=DeleteButton::widget(['model' => $item]);?> <?php /* Виджеты ниже позволят выбрать кол-во или опции элемента. Можно передать как модель элемента корзины, так и сам продукт, когда он еще не стал элементом. */ ?> <?=ChangeCount::widget(['model' => $item]);?> <?php /* У ChangeOptions можно изменить вид ('type' => ChangeOptions::TYPE_RADIO) */ ?> <?=ChangeOptions::widget(['model' => $item]);?>
折扣
折扣通过行为和/或事件实现。可以将任何行为(在配置中)分配给购物车
'cart' => [ 'class' => 'pistol88\cart\Cart', //... 'as discount' => [ 'class' => 'pistol88\cart\behaviors\Discount', 'percent' => 50, ], ],
行为连接到 EVENT_CART_COST 事件并设置折扣(请参阅 pistol88\cart\behaviors\Discount)。
可以直接连接到事件
'cart' => [ 'class' => 'pistol88\cart\Cart', //... 'on cart_cost' => function($event) { $event->cost = ($event->cost*50)/100; } ],
事件
所有购物车事件
- EVENT_CART_COST - 总价格变化
- EVENT_CART_COUNT - 数量变化
- EVENT_CART_TRUNCATE - 清空购物车
- EVENT_CART_PUT - 添加元素
- EVENT_ELEMENT_COST - 元素价格变化
- EVENT_ELEMENT_ROUNDING - 元素价格舍入