oguzcandemircan / laravel-cart
轻松管理Laravel应用的购物车
Requires
- php: ^7.3|^7.4|^8.0
- ext-intl: *
- illuminate/support: 5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0
Requires (Dev)
- laravel/legacy-factories: ^1.0.4
- orchestra/testbench: ^6.15.1
- phpunit/phpunit: ^9.3.9
This package is auto-updated.
Last update: 2024-09-28 02:02:23 UTC
README
购物车管理器(Laravel 5.5至Laravel 8.x)
让我们使Laravel的购物车管理变得简单。
这只是另一个购物车包吗?
虽然有一些维护良好的购物车包可用,但我希望有一个感觉像“Laravel方式”的解决方案,并且与数据库耦合更紧密,同时提供诸如运费、折扣、税费、总计、舍入、访客购物车等附加功能开箱即用,同时仍然是一个易于使用的包。
何时/为什么使用?
让我们决定何时使用此包。
- 您正在寻找一个易于使用的解决方案,该解决方案为用户和访客提供购物车功能。
- 您想要确保购物车可以通过API工作,以支持移动应用程序。
- 您想要诸如运费、税费、折扣、舍入等功能。
- 您想将购物车数据存储在数据库、会话或自定义位置。
- 您喜欢使用更类似于“Laravel方式”的包。
要求
安装
- 在您的终端/命令提示符中运行此命令以安装包
composer require freshbitsweb/laravel-cart-manager
- 在您的终端/命令提示符中运行此命令以导入配置文件
php artisan vendor:publish --tag=laravel-cart-manager-config
- 在您的终端/命令提示符中运行这些命令以导入迁移文件
php artisan vendor:publish --tag=laravel-cart-manager-migrations
php artisan migrate
- 将特质添加到购物车项的模型中
<?php namespace App; use Illuminate\Database\Eloquent\Model; use OguzcanDemircan\LaravelCart\Traits\Cartable; class Product extends Model { use Cartable; // ... }
使用 - 简单如1 2 3
// Add to cart $cart = Product::addToCart($productId); // Remove from cart $cart = cart()->removeAt($cartItemIndex); // Apply discount $cart = cart()->applyDiscount($percentage); // Fetch cart $cart = cart()->toArray();
演示仓库
此包使用演示的仓库可以在以下位置找到 - https://github.com/freshbitsweb/laravel-cart-manager-demo
目录
配置选项
cart_manager.php
文件包含以下配置选项
-
driver : (默认: DatabaseDriver) 用于存储和检索购物车详情的驱动程序。您可以使用现有的驱动程序或创建自己的驱动程序。
-
auth_guard : (默认: web) 用于识别已登录客户的认证保护器。此包可以存储访客用户以及已登录用户的购物车。
-
shipping_charges : (默认: 10) 应应用于订单的运费金额。
-
shipping_charges_threshold : (默认: 100) 避免运费的最小订单金额。请注意,订单金额是根据购物车项目的子总金额(减去折扣金额)计算的。
-
tax_percentage : (默认: 6%) 税费适用于购物车项目的子总金额(减去折扣金额)加上运费,并四舍五入到两位小数。
-
round_off_to : (默认: 0.05) 您可能希望将订单金额四舍五入到最接近的十进制点。选项为(0或0.05或0.1或0.5或1)
-
cookie_name : (默认:cart_identifier) 包存储以标识Web应用的访客并存储其购物车数据的cookie名称。
-
cookie_lifetime : (默认:1周) 购物车cookie在客户浏览器中有效的分钟数。
-
LC_MONETARY : (默认:en_US.UTF-8) 此选项用于使用货币符号显示购物车的各种总计。我们使用php的本地money_format()函数来显示金额。
-
cart_data_validity : (默认:1周) (数据库驱动程序仅限) 您可能希望从数据库中删除旧/无效的购物车数据。您可以指定有效期并运行/安排ClearCartDataCommand。
驱动程序
您可以在cart_manager.php
配置文件中设置用于存储和检索购物车详细信息的驱动程序。您可以使用现有的驱动程序或创建自己的驱动程序。
数据库驱动程序
数据库驱动程序将购物车数据存储在2个表中:carts
和cart_items
。您还可以通过运行ClearCartDataCommand
删除陈旧数据。
使用此驱动程序允许您在服务器上存储购物车数据,并且客户可以在各个渠道(例如移动应用、网站等)上显示相同的购物车。
会话驱动程序
此驱动程序根据会话驱动程序将购物车数据存储在会话中。此驱动程序不支持通过API为访客进行购物车管理,因为我们无法有统一的方式来跟踪用户。
购物车管理
所有这些操作都返回带有项目的完整购物车数据。
添加到购物车
/**
* Add to cart
*
* @return json
*/
public function addToCart()
{
return Product::addToCart(request('productId'));
}
从购物车中删除
/**
* Remove from cart
*
* @return json
*/
public function removeFromCart()
{
return cart()->removeAt(request('cartItemIndex'));
}
增加/减少购物车项的数量
/**
* Increment cart item quantity
*
* @return json
*/
public function incrementCartItem()
{
return cart()->incrementQuantityAt(request('cartItemIndex'));
}
/**
* Decrement cart item quantity
*
* @return json
*/
public function decrementCartItem()
{
return cart()->decrementQuantityAt(request('cartItemIndex'));
}
更新购物车项的用户输入数量
/**
* Update user input quantity.
*
* @return json
*/
public function cartItemQuantitySet()
{
return cart()->setQuantityAt(request('cartItemIndex'), request('cartQuantity'));
}
清空购物车
/**
* Clear Cart
*
* @return json
*/
public function clearCart()
{
return cart()->clear();
}
获取购物车数据
获取完整的购物车详情
$cart = cart()->toArray();
获取购物车属性
$cartAttributes = cart()->data();
获取带有货币金额的购物车属性
$cartTotals = cart()->totals();
获取购物车单个属性
购物车具有以下属性:subtotal
、discount
、discountPercentage
、couponId
、shippingCharges
、netTotal
、tax
、total
、roundOff
、payable
。
您可以使用getter方法访问它们中的任何一个。例如,
$subtotal = cart()->getSubtotal();
获取购物车项目
$cartItems = cart()->items();
获取带有货币金额的购物车项目
$cartItems = cart()->items($displayCurrency = true);
折扣
应用百分比折扣
$cart = cart()->applyDiscount($percentage);
应用固定折扣
$cart = cart()->applyFlatDiscount($discountAmount);
更新项目价格
由于此包将购物车项目的详细信息存储在单独的表或会话中,因此更新购物车项的价格、名称或图像时,购物车数据将不会更新。
如果您定期更新任何项目详情,我们建议在最终结账之前运行以下代码,以确保订单总计根据最新价格是最新的。
cart()->refreshAllItemsData();
此代码将遍历每个购物车项目并更新为最新详情。
通过API使用
注意:此功能仅适用于数据库驱动程序。
此包使用cookie和会话在页面刷新期间维护购物车数据。由于API是无状态的,我们无法使用它们来完成相同的任务。
为了解决这个问题,您可以手动设置已验证的用户ID以维护购物车数据。
cart()->setUser($userId);
运行此代码将告诉包将购物车数据分配给指定的用户。
注意:由于我们无法有统一的方式来跟踪用户,因此访客无法通过API管理他们的购物车。
事件
与Laravel一起工作,我们怎能忘记事件呢?
此包触发各种与购物车相关的事件,您可以为任何应用程序更新监听这些事件。
-
CartCreated -> 在第一次为会话创建购物车时触发,变量
$cartData
包含完整的购物车数据。 -
CartItemAdded -> 在向购物车添加项目时触发,变量
$entity
包含新的Eloquent模型对象。 -
CartItemRemoved -> 当从购物车中移除商品时触发,并包含新的Eloquent模型对象在变量
$entity
中。 -
DiscountApplied -> 当对购物车应用折扣时触发,并包含完整的购物车数据在变量
$cartData
中。 -
CartCleared -> 当购物车被清空时触发。
示例用法
在EventServiceProvider
类中添加事件和监听器条目
protected $listen = [
'OguzcanDemircan\LaravelCart\Events\CartCreated' => [
'App\Listeners\LogCartCreated',
],
];
创建相应的监听器
<?php
namespace App\Listeners;
use Illuminate\Support\Facades\Log;
use OguzcanDemircan\LaravelCart\Events\CartCreated;
class LogCartCreated
{
/**
* Handle the event.
*
* @param CartCreated $event
* @return void
*/
public function handle(CartCreated $event)
{
Log::info('cart', [$event->cartData]);
}
}
命令
注意: 这仅适用于数据库驱动程序。
您可能希望从数据库中删除旧/无效的购物车数据。
为同一目的安排ClearCartDataCommand。
protected function schedule(Schedule $schedule)
{
$schedule->command('lcm_carts:clear_old')->daily();
}
这将删除基于cart_data_validity
配置选项考虑的旧/无效数据。
测试
运行此命令以运行包的测试
composer test
作者
- Gaurav Makhecha - 初始工作
另请参阅参与此项目的贡献者列表。
许可证
本项目采用MIT许可证 - 请参阅LICENSE文件以获取详细信息
免费软件
您可以使用此软件包,但如果它进入了您的生产环境,我将非常感激您为世界买一棵树。
现在众所周知,应对气候危机并防止我们的温度升高超过1.5C的最佳工具之一是种植树木。如果您为我们的森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。
您可以在offset.earth/treeware为我们森林购买树木。
有关Treeware的更多信息,请参阅treeware.earth
特别感谢
- Laravel社区