edwinylil1 / laravelshoppingcart
Laravel 购物车组件 VE
Requires
- php: >=7.2.5
- illuminate/collections: ^10 || ^11
- illuminate/events: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/session: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
README
兼容性
使用指南
Laravel 购物车组件是一个购物车包,允许处理不同税率的产品。
安装
我们可以在 composer.json
文件中添加依赖项
"require": { "edwinylil1/laravelshoppingcart": "~1.0.0", },
或者执行
composer require edwinylil1/laravelshoppingcart
Laravel <= 7.0
如果你仍然使用 Laravel 7.0 版本,你需要添加包的服务提供者并为其分配别名。为此,打开你的 config/app.php 文件
nano config/app.php
在 providers 数组中添加一行新内容
JeleDev\Shoppingcart\ShoppingcartServiceProvider::class
并在 aliases
数组中添加一行新内容
'Cart' => JeleDev\Shoppingcart\Facades\Cart::class,
现在你就可以在你的应用程序中使用购物车了。
用户指南
你可以通过链接快速跳转到你感兴趣的主题
配置
购物车将信息存储在会话中。但是,你可以将购物车保存到数据库中以便以后检索。
默认情况下,该包将使用 'MySQL' 数据库连接并使用名为 'shopping_cart' 的表。
该包旨在处理四种产品税率。如果税率传递为 null,将为产品设置默认税率选项。
默认税率值如下
'default_aliquot' => 0, 'taxes' => [ '0' => [ 'name' => 'GENERAL', 'value' => 16.00 ], '1' => [ 'name' => 'EXEMPT', 'value' => 0.00 ], '2' => [ 'name' => 'REDUCED', 'value' => 8.00 ], '3' => [ 'name' => 'LUXURY', 'value' => 31.00 ] ]
你可以根据需要修改名称和值属性。
对于委内瑞拉,该包支持 'The Factory HKA' 和 'PNP Developments' 税务提供商的发票计算
有三种可用的控制器选项,其中 'HKA' 是默认选择。它们之间的定价计算差异如下
GENERAL:
55.866 = 55.87 | 55.865 = 55.87 | 55.864 = 55.86
HKA:
55.866 = 55.87 | 55.865 = 55.87 | 55.864 = 55.86
PNP:
55.866 = 55.86 | 55.865 = 55.86 | 55.864 = 55.86
如果你希望更改这些选项,你需要发布配置文件。
php artisan vendor:publish --provider="JeleDev\Shoppingcart\ShoppingcartServiceProvider" --tag="config"
使用方法
- Cart::add()
- Cart::update()
- Cart::content()
- Cart::get()
- Cart::search()
- Cart::total()
- Cart::tax()
- Cart::subtotal()
- Cart::count()
- Cart::addCost()
- Cart::getCost()
- Cart::remove()
- Cart::destroy()
导入类以使用其功能
use Cart;
你可以使用以下方法操作购物车
添加
要向购物车添加项目,只需使用 add()
方法,该方法接受多种参数。
在其最基本的形式中,你可以指定要添加到购物车的产品的 id、名称、数量和价格。
Cart::add('code','product name...',1,1.30);
这样,项目将被添加,并将使用配置文件中 default_aliquot 属性定义的默认税率计算税额。
可选的,第五个参数对应于要应用的税率标识符,它接受从 0 到 4 的值。同时,第六个参数是一个数组,你可以根据需要使用它,例如提供产品显示的图像 URL。
Cart::add('code','product name...',1,1.30,1,["image" => 'url image']);
add()
方法将返回你刚刚添加到购物车中的项目的 CartItem 实例。
如果你希望使用数组添加项目,只要数组包含所需的键,你就可以将数组传递给该方法,而无需传递其余参数。 aliquot 和 options 键是可选的。
Cart::add(['id' => 'code', 'name' => 'product name...', 'qty' => 1, 'price' => 1.30, 'options' => ["image" => 'url image']]);
如果相同的商品被放入购物车两次,会发生什么?在这些情况下,实现了Comparable接口。因此,而不是将两个单独的商品添加到购物车中,它将搜索现有的商品,并通过提供的数量增加其数量。
更新
要更新购物车中的商品,你需要rowId。你可以使用update()
方法来更新它。如果你只想更新数量,你将传递rowId和新的数量到更新方法中。
$rowId = '26d21fe340e373e8e7e20f87e0860b74'; Cart::update($rowId, 2);
如果你想更新商品的更多属性,你可以将数组或Comparable作为更新方法的第二个参数传递。这样,你可以使用提供的rowId更新商品的所有信息。
$rowId = '26d21fe340e373e8e7e20f87e0860b74'; Cart::update($rowId, ['name' => 'new name']); Cart::update($rowId, $product);
内容
要检索购物车的商品内容,你将使用content()
方法。此方法将返回一个CartItems集合,你可以遍历并显示内容给客户。
Cart::content();
此方法将返回当前购物车实例的内容,如果你想要其他实例的内容,可以链式调用。
Cart::instance('wishlist')->content();
获取
如果你想从购物车中检索单个商品,你可以调用get()
方法并传递rowId给它。
$rowId = '26d21fe340e373e8e7e20f87e0860b74'; Cart::get($rowId);
搜索
要查找购物车中的商品,你可以使用search()
方法。
例如,如果你想查找所有名称为"tube"的商品,你可以使用以下代码
$cart->search(function ($cartItem, $rowId) { return $cartItem->name === 'tube'; });
总计
total()
方法可以用来获取购物车中所有商品的计算总价,考虑价格、数量和配置的驱动程序。它还包括任何额外的费用。
Cart::total();
你可以在配置文件中设置默认的数字格式。
如果你没有使用外观模式,但在你的(例如)控制器中使用依赖注入,你也可以简单地获取总属性$cart->total
税
tax()
方法可以用来获取所有商品的税额,给定价格、数量和配置的驱动程序。
Cart::tax();
以下是一个使用HKA驱动程序的响应示例
{
"GENERAL": {
"IVA": 16,
"value": 0
},
"CUSTOM NAME": {
"IVA": 0,
"value": 0
},
"REDUCED": {
"IVA": 8,
"value": 0
},
"LUXURY": {
"IVA": 31,
"value": 2.01
}
}
你可以在配置文件中设置默认的数字格式。
如果你没有使用外观模式,但在你的(例如)控制器中使用依赖注入,你也可以简单地获取税属性$cart->tax
小计
subtotal()
方法可以用来获取购物车中所有商品的总计,减去税额总和。
Cart::subtotal();
你可以在配置文件中设置默认的数字格式。
如果你没有使用外观模式,但在你的(例如)控制器中使用依赖注入,你也可以简单地获取小计属性$cart->subtotal
计数
如果你想知道购物车中有多少商品,你可以使用count()
方法。此方法将返回购物车中商品的总数量。因此,如果你添加了2个管子和1台电视,它将返回3个商品。
Cart::count();
添加费用
如果你想向购物车中添加额外的费用,你可以使用addCost()
方法。此方法接受费用名称和费用价格。这可以用于例如运费或交易费用。
Cart::addCost($name, $price)
在汇总整个购物车之前添加此方法。费用尚未保存到会话中。
获取费用
通过addCost()
获取添加的费用。接受费用名称。返回格式化的费用价格。
Cart::getCost($name)
删除
要从购物车中删除商品,你需要将rowId传递给remove()
方法,然后它将删除购物车中的商品。
$rowId = '26d21fe340e373e8e7e20f87e0860b74'; Cart::remove($rowId);
销毁
如果你想完全删除购物车的内容,可以在购物车上调用destroy()
方法。这将删除当前购物车实例的所有CartItems。
Cart::destroy();
实例
支持多个购物车实例。以下是它的工作方式
你可以通过调用以下内容来设置当前购物车实例
Cart::instance('Instance name');
从现在起,活动的购物车实例将是 实例名称
,所以当您添加、删除或获取购物车的内容时,您正在与 实例名称
实例的购物车进行操作。
如果您想切换实例,只需再次调用 Cart::instance('新实例') 即可,然后您将再次与“新实例”进行操作。
以下是一个小例子
Cart::instance('shopping')->add('code', 'Product 1', 1, 9.99); // Get the content of the 'shopping' cart Cart::content(); Cart::instance('wishlist')->add('code', 'Product 2', 1, 19.95, 1, ['image' => 'url image']); // Get the content of the 'wishlist' cart Cart::content(); // If you want to get the content of the 'shopping' cart again Cart::instance('shopping')->content(); // And the count of the 'wishlist' cart again Cart::instance('wishlist')->count();
注意:请记住,只要在脚本执行期间不设置不同的实例,购物车将保持在最后设置的实例中。
注意2:默认购物车实例称为 shopping_cart
,所以当您不使用实例时,Cart::content();
与 Cart::instance('shopping_cart')->content()
相同。
数据库
数据库配置
默认情况下,该包将使用 'MySQL' 数据库连接,并使用名为 'shopping_cart' 的表。如果您想更改这些选项,您需要发布配置文件。
php artisan vendor:publish --provider="JeleDev\Shoppingcart\ShoppingcartServiceProvider" --tag="config"
这将为您提供一个 cart.php
配置文件,您可以在其中进行更改。
为了让您的生活更简单,该包还包括一个现成的 migration
,您可以通过运行
php artisan vendor:publish --provider="JeleDev\Shoppingcart\ShoppingcartServiceProvider" --tag="migrations"
这将把 shopping_cart
表的迁移文件放入 database/migrations
目录。现在您只需运行 php artisan migrate
以迁移您的数据库。
存储购物车
要将您的购物车实例存储到数据库中,您必须调用 store($identifier)
方法。其中 $identifier
是一个随机密钥,例如用户的 id 或用户名。
Cart::store('username');
要存储名为 'custom name' 的购物车实例
Cart::instance('custom name')->store('code');
恢复购物车
如果您想从数据库中检索购物车并恢复它,您只需调用 restore($identifier)
,其中 $identifier
是您为 store
方法指定的密钥。
Cart::restore('username');
要恢复名为 'custom name' 的购物车实例
Cart::instance('custom name')->restore('code');
集合
在多个实例上,购物车会返回一个 Collection。这只是简单的 Laravel Collection,所以您可以在结果上调用所有 Laravel Collection 的方法。
例如,您可以快速获取购物车中独特产品的数量
Cart::content()->count();
或者,您可以按产品的 id 对内容进行分组
Cart::content()->groupBy('id');
模型
由于直接从 CartItem 访问模型可能非常有用,因此可以将模型与购物车中的项目相关联。假设您在应用程序中有一个 Product
模型。使用 associate()
方法,您可以向购物车说明购物车中的项目与 Product
模型相关联。
这样,您就可以直接从 CartItem
访问模型了!
您可以通过 CartItem 上的 model
属性访问模型。
如果您的模型实现了 Buyable
接口,并且您已使用该模型将项目添加到购物车中,它将自动关联。
以下是一个示例
// First we'll add the item to the cart. $cartItem = Cart::add('code', 'Product name', 1, 9.99); // Next we associate a model with the item. Cart::associate($cartItem->rowId, 'Product'); // Or even easier, call the associate method on the CartItem! $cartItem->associate('Product'); // You can even make it a one-liner Cart::add('code', 'Product name', 1, 9.99)->associate('Product'); // Now, when iterating over the content of the cart, you can access the model. foreach(Cart::content() as $row) { echo 'You have ' . $row->qty . ' items of ' . $row->model->name . ' with description: "' . $row->model->description . '" in your cart.'; }
异常
如果出现问题,该包将抛出异常。这使得在使用该包时调试代码或根据异常类型处理错误变得更加容易。以下是可以抛出的异常
事件
购物车还内置了事件。有五个事件可供您监听
贡献
贡献很容易!只需分支存储库,进行更改,然后在 GitHub 上发送拉取请求。如果您的 PR 在队列中停滞不前,并且似乎没有任何动静,那么向 EVillegas 发送 电子邮件。