armezit/getcandy-purchase-limit

v0.8.3 2024-02-25 13:06 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

农历的购买限制插件允许你在Lunar店铺中定义复杂的购买限制场景。

功能

你可以为每个规则定义一个标准。目前,你可以定义以下购买限制:

  • 特定产品
  • 特定产品变体
  • 客户或客户组
  • 特定客户或客户组的特定产品
  • 特定客户或客户组的特定产品变体

每个购买限制规则都允许你限制数量、金额(总额)或两者。

Product Purchase Limit Slot

快速设置

通过composer安装Lunar购买限制

composer require armezit/lunarphp-purchase-limit

使用以下命令运行迁移

php artisan migrate

用法

默认情况下,在快速设置后,你可以开始定义产品和客户的购买限制。如果你需要更多定制,还有一个详细的安装指南

检测定义限制的违规行为

每当检测到定义的限制违规时,该包都会抛出Lunar\Exceptions\Carts\CartException异常的子类型。

通常,你希望在创建订单过程中捕获这些异常

use Lunar\Facades\CartSession;
use Lunar\Exceptions\Carts\CartException;
use Armezit\Lunar\PurchaseLimit\Exceptions\PurchaseLimitException;
use Armezit\Lunar\PurchaseLimit\Exceptions\CustomerQuantityLimitException;

try {
    $order = CartSession::current()
                ->getManager()
                ->createOrder();

// catch any CartException
} catch (CartException $e) {
    ...

// catch any kind of purchase limit violation
} catch (PurchaseLimitException $e) {
    ...

// catch specific kind of purchase limit violation
} catch (CustomerQuantityLimitException $e) {
    // customer quantity limit exceeded
}

产品购买限制(槽)

产品购买限制槽允许你为特定产品定义限制。

以下示例中,我们已为产品A定义了限制规则

  1. 任何客户在每个中最多可购买10个产品的单位。
  2. Retail组的客户在每个购买中最多可购买2000总额的产品。例如,如果产品价格为$500,他们每次订单只能购买最多4个产品A

Product Purchase Limit Example 1

默认情况下,你将在产品编辑页面的底部找到此槽。但是,你可以在配置文件中更改此默认位置。

客户购买限制(槽)

客户购买限制槽允许你为特定客户或客户组定义限制。

待办事项:尚未实现!

高级用法

架构

主要组件是Rule类,它检查数据库中存储的定义的限制(如果检测到规则的违规,则抛出异常)。

有两种规则实现了CartRuleInterfaceCartLineRuleInterface契约。

每个规则仅执行一种独特的检查。

例如,CustomerProductLimit规则仅检查特定客户在特定产品上的购买限制。

CustomerLimit规则仅检查特定客户在任意产品上的购买限制,而ProductLimit规则仅检查任意客户在特定产品上的购买限制;等等。

这些规则被注入到购物车/购物车行修改器的管道中。

因此,每次你尝试调用CreateOrder操作时,这些规则都会逐个执行,并在检测到定义的限制违规时抛出异常。

复杂规则

尽管有用于定义典型限制的Hub槽位,但直接在数据库中保存购买限制并不会阻止您编写更复杂的规则。

查看PurchaseLimit 模型。

扩展

此外,您可以通过实现 CartRuleInterface 和/或 CartLineRuleInterface 合约并注入到修改器管道中来扩展/修改业务逻辑。

在实现新的 CheckVeryComplexLimit 规则后,将其添加到配置文件中相应的管道

'cart_rules' => [
    ...
    CheckVeryComplexLimit::class,
],

'cart_line_rules' => [
    ...
    CheckVeryComplexLimit::class,
],

安装

快速安装 涵盖了基本的安装步骤。然而,本节是一个详细的安装过程,包含所有可选部分。

您可以通过composer安装此包

composer require armezit/lunarphp-purchase-limit

迁移

可选地,发布迁移

php artisan vendor:publish --tag="lunarphp-purchase-limit-migrations"

使用以下命令运行迁移

php artisan migrate

::: tip 表名是可配置的。请参阅配置文件。 ::

配置

您可以使用以下方法发布配置文件

php artisan vendor:publish --tag="lunarphp-purchase-limit-config"

这是已发布的配置文件的内容

return [
    /*
     * List of rules to check during CartModifier::calculated() hook
     */
    'cart_rules' => [
        ProductLimit::class,
        CustomerLimit::class,
        CustomerProductLimit::class,
    ],

    /*
     * List of rules to check during CartLineModifier::calculated() hook
     */
    'cart_line_rules' => [
        ProductVariantLimit::class,
        CustomerProductVariantLimit::class,
    ],

    /*
     * Automatically register purchase-limit`s cart/cart-line modifiers during PurchaseLimitServiceProvider boot
     * Set it to false, if you want to manually register cart/cart-line modifiers
     */
    'register_cart_modifiers' => true,

    /*
     * Automatically register purchase-limit admin hub slots
     * Set it to false, if you want to manually register them
     */
    'register_hub_slots' => true,

    /*
     * The name (handle) of hub slot which you want to display product purchase limit component
     */
    'product_purchase_limit_slot' => 'product.all',

    'database' => [
        'purchase_limits_table' => 'purchase_limits',
    ],
];

翻译 & 视图

可选地,您可以使用以下方法发布翻译和视图

php artisan vendor:publish --tag="lunarphp-purchase-limit-translations"
php artisan vendor:publish --tag="lunarphp-purchase-limit-views"

服务提供者

默认情况下,此包在安装时自动注册其服务提供者。

如果您出于任何原因希望手动注册它们,则应将包服务提供者添加到您的laravel应用程序的 config/app.php 文件中。

// ...
'providers' => [
    // ...
    Armezit\Lunar\PurchaseLimit\PurchaseLimitServiceProvider::class,
    Armezit\Lunar\PurchaseLimit\PurchaseLimitHubServiceProvider::class,
],

PurchaseLimitServiceProvider 引导主要包功能,而 PurchaseLimitHubServiceProvider 用于注册一些 槽位 以用于Lunar Admin Hub。

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献

安全漏洞

请审查我们关于如何报告安全漏洞的 安全策略

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅 许可证文件