armezit / getcandy-purchase-limit
农历电子商务购买限制插件
Requires
- php: ^8.0
- livewire/livewire: ^2.0
- lunarphp/lunar: ^0.8
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
README
农历的购买限制插件允许你在Lunar店铺中定义复杂的购买限制场景。
功能
你可以为每个规则定义一个标准。目前,你可以定义以下购买限制:
- 特定产品
- 特定产品变体
- 客户或客户组
- 特定客户或客户组的特定产品
- 特定客户或客户组的特定产品变体
每个购买限制规则都允许你限制数量、金额(总额)或两者。
快速设置
通过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
定义了限制规则
- 任何客户在每个
周
中最多可购买10
个产品的单位。 Retail
组的客户在每个购买
中最多可购买2000
总额的产品。例如,如果产品价格为$500,他们每次订单只能购买最多4个产品A
。
默认情况下,你将在产品编辑页面的底部找到此槽。但是,你可以在配置文件中更改此默认位置。
客户购买限制(槽)
客户购买限制槽允许你为特定客户或客户组定义限制。
待办事项:尚未实现!
高级用法
架构
主要组件是Rule
类,它检查数据库中存储的定义的限制(如果检测到规则的违规,则抛出异常)。
有两种规则实现了CartRuleInterface
或CartLineRuleInterface
契约。
每个规则仅执行一种独特的检查。
例如,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)。有关更多信息,请参阅 许可证文件。