freshbitsweb/laravel-cart-manager

轻松管理您的 Laravel 应用程序的购物车

v1.6.0 2023-02-28 03:40 UTC

README

Latest Stable Version Total Downloads License StyleCI Buy us a tree

购物车管理器(Laravel 5.5 至 Laravel 10.x)

让我们轻松实现 Laravel 的购物车管理。

这只是另一个购物车包吗?

虽然已经有一些维护良好的购物车包可用,但我希望有一个感觉像 “Laravel 方式” 的解决方案,并且与数据库耦合更紧密,同时提供额外的功能,如 运费折扣总计四舍五入访客购物车 等,并且仍然是一个非常易于使用的包。

何时/为何使用?

让我们决定何时使用此包

  1. 您正在寻找一个易于使用的解决方案,该解决方案为用户和访客提供购物车功能。
  2. 您想确保购物车可以通过 API 工作,以支持移动应用程序。
  3. 您想要运费、税、折扣、四舍五入等功能。
  4. 您想要在数据库、会话或自定义位置存储购物车数据。
  5. 您喜欢使用更类似于 “Laravel 方式” 的包

要求

安装

  1. 在您的终端/cmdd 中运行以下命令安装此包
composer require freshbitsweb/laravel-cart-manager
  1. 在您的终端/cmdd 中运行以下命令导入配置文件
php artisan vendor:publish --tag=laravel-cart-manager-config
  1. 在您的终端/cmdd 中运行以下命令导入迁移文件
php artisan vendor:publish --tag=laravel-cart-manager-migrations
php artisan migrate
  1. 向购物车项模型添加一个特质
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Freshbitsweb\LaravelCartManager\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 文件包含以下配置选项

  1. driver : (默认: DatabaseDriver) 应用于存储和检索购物车详情的 驱动程序。您可以使用现有的或创建自己的。

  2. auth_guard : (默认: web) 应用于识别已登录客户的身份验证守卫。此包可以为访客用户以及已登录用户存储购物车。

  3. shipping_charges : (默认: 10) 应应用于订单的运费金额。

  4. shipping_charges_threshold : (默认: 100) 避免运费的最小订单金额。请注意,订单金额是根据购物车项的小计减去折扣金额计算的。

  5. tax_percentage : (默认: 6%) 税额应用于购物车项的小计减去折扣金额加上运费,并四舍五入到两位小数。

  6. round_off_to : (默认: 0.05) 您可能希望将订单金额四舍五入到最接近的十分位。选项为(0 或 0.05 或 0.1 或 0.5 或 1)

  7. cookie_name : (默认: cart_identifier) 此包存储以识别 Web 应用程序的访客并存储其购物车数据的 cookie 名称。

  8. cookie_lifetime : (默认: 1 week) 购物车 cookie 在客户浏览器中有效的分钟数。

  9. LC_MONETARY : (默认: en_US.UTF-8) 此选项用于使用货币符号显示购物车中的各种总计。我们使用 PHP 的原生 money_format() 函数来显示金额。

  10. cart_data_validity : (默认: 1 周) (仅数据库驱动) 您可能希望从数据库中删除旧/无效的购物车数据。您可以指定有效期并运行/安排 ClearCartDataCommand

⬆ 返回顶部

驱动程序

您可以在 cart_manager.php 配置文件中设置用于存储和检索购物车详情的驱动程序。您可以使用现有的驱动程序或创建自己的驱动程序。

数据库驱动程序

数据库驱动程序将购物车数据存储在 2 个表中: cartscart_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();

获取购物车单个属性

购物车有以下属性: subtotaldiscountdiscountPercentagecouponIdshippingChargesnetTotaltaxtotalroundOffpayable

您可以使用获取器方法访问其中任何一个。例如,

$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 一起工作,我们怎能忘记事件呢?

此包会触发各种与购物车相关的事件,您可以为任何应用程序更新监听这些事件。

  1. CartCreated -> 当第一次为会话创建购物车时触发,并在变量 $cartData 中包含完整的购物车数据。

  2. CartItemAdded -> 当向购物车添加项目时触发,并在变量 $entity 中包含新的 Eloquent 模型对象。

  3. CartItemRemoved -> 当从购物车中删除项目时触发,并在变量 $entity 中包含新的 Eloquent 模型对象。

  4. DiscountApplied -> 当折扣应用到购物车时触发,变量 $cartData 包含完整的购物车数据。

  5. CartCleared -> 购物车被清空时触发。

示例用法

EventServiceProvider 类中添加事件和监听器条目

protected $listen = [
	'Freshbitsweb\LaravelCartManager\Events\CartCreated' => [
		'App\Listeners\LogCartCreated',
	],
];

创建相应的监听器

<?php

namespace App\Listeners;

use Illuminate\Support\Facades\Log;
use Freshbitsweb\LaravelCartManager\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

作者

另请参阅参与此项目的贡献者列表

⬆ 返回顶部

许可证

本项目采用MIT许可证 - 详细内容请参阅LICENSE文件。

Treeware

您可以使用此包,但如果它进入您的生产环境,我非常希望您能买一棵树。

众所周知,应对气候危机并保持气温不上升超过1.5C的最好工具之一是种植树木。如果您为我们的森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。

您可以在offset.earth/treeware为我们森林购买树木。

有关Treeware的更多信息,请访问treeware.earth

特别感谢