setono/sylius-tier-pricing-plugin
Composer 安装命令:
composer require setono/sylius-tier-pricing-plugin
包简介
Use price tiers in your Sylius store.
关键字:
README 文档
README
Use quantity-based price tiers in your Sylius store. Set a tier like "10% off when buying 5 or more" on a product, optionally scoped to a specific channel and/or variant; the discount is applied automatically as a per-unit ORDER_UNIT_PROMOTION_ADJUSTMENT with originCode = 'tier_pricing'.
Requirements
- PHP
>=8.2 - Symfony
^6.4 || ^7.4 - Sylius
^2.0
For Sylius 1.x see the 1.x branch. Upgrading from 1.x → 2.x? See UPGRADE.md.
Installation
composer require setono/sylius-tier-pricing-plugin
Register the bundle in config/bundles.php:
return [ // ... Setono\SyliusTierPricingPlugin\SetonoSyliusTierPricingPlugin::class => ['all' => true], ];
Make your App\Entity\Product use the plugin's trait + interface:
use Setono\SyliusTierPricingPlugin\Model\ProductInterface as TierPricingProductInterface; use Setono\SyliusTierPricingPlugin\Model\ProductTrait as TierPricingProductTrait; class Product extends BaseProduct implements TierPricingProductInterface { use TierPricingProductTrait { TierPricingProductTrait::__construct as private _initializePriceTiers; } public function __construct() { parent::__construct(); $this->_initializePriceTiers(); } }
Wire the resource override in config/packages/_sylius.yaml:
sylius_product: resources: product: classes: model: App\Entity\Product
Update the database schema:
bin/console doctrine:migrations:diff bin/console doctrine:migrations:migrate
How it works
After install, products in the admin get a Price tiers tab (rendered via Twig hooks into the product update/create page). Each tier has:
- Quantity — minimum units the customer must add to the cart for the tier to kick in.
- Discount — percentage off, kept as a numeric string and computed with
brick/mathto avoid float drift. - Channel — optional; restricts the tier to one channel.
- Variant — optional; restricts the tier to one variant of the product.
When an order is processed, the PriceTiersOrderProcessor (priority 15, runs before tax/shipping) picks the best-matching tier per item using the precedence (channel + variant) > variant > channel > generic, computes the discount with RoundingMode::CEILING, distributes it across units via sylius.distributor.integer, and attaches one adjustment per unit.
统计信息
- 总下载量: 8.76k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-01-30