Cart Promotions
The Cart Promotions system in Sylius is highly flexible, combining promotion rules and actions to create tailored discount programs.
Promotion Basics
Each cart promotion has:
A unique code and name.
A usage limit: the total number of times it can be used.
A validity period: the time frame during which it is active.
An exclusivity option: exclusive promotions prevent other promotions from being applied.
A priority: used to control the order of application, especially for exclusive promotions.
Promotion priorities are assigned as numbers. Higher numbers indicate higher priority, so a promotion with a priority 3
will be applied before one with a priority 1
Example of Priority Use: Suppose you have two promotions—one for 10% off the entire order and another for a $5 discount. In this case, you might want to apply the 10% discount first to maximize its impact.
Creating a Promotion Programmatically
To create a promotion, use the promotion factory:
However, a basic promotion needs Rules and Actions to be functional.
Promotion Rules
Promotion rules define the conditions that must be met for a promotion to apply. Each rule has a specific RuleChecker that checks order details, such as:
Whether a specific taxon is in the order.
If the total price of items in a specific taxon meets a threshold.
Whether the order total reaches a specified amount.
and more...
Default Promotion Rule Types in Sylius
Cart Quantity
Checks if the cart has a certain number of items
Item Total
Checks if the cart’s item total meets a specified amount
Has at least one from taxons
Ensures the cart includes items from certain taxons
Total price of items from taxon
Ensures items from a specific taxon meet a total price threshold
Nth Order
Checks if the customer is placing their nth order
Shipping Country
Verifies the shipping country matches a specific requirement
Customer Group
Ensures the customer belongs to a certain group
Contains Product
Checks if a specified product is in the order
Creating a Promotion Rule Programmatically
Use the PromotionRuleFactory
to create and configure rules.
Example: To set a rule that requires at least 5 items in the cart:
Rules define eligibility conditions only. To apply discounts, actions are required.
Promotion Actions
Promotion actions define what happens when promotion rules are met. Actions include various types of discounts:
Fixed Order Discount: e.g., $5 off the order total.
Percentage Order Discount: e.g., 10% off the entire order.
Fixed Unit Discount: e.g., $1 off each unit.
Percentage Unit Discount: e.g., 10% off each unit.
Shipping Percentage Discount: e.g., 10% off shipping costs.
Actions affect all items in the order by default. To apply discounts to specific items only, use filters.
Creating a Promotion Action Programmatically
Use the PromotionActionFactory
to create actions. For example, to set a fixed discount of $10:
After configuring rules and actions, save the promotion to the repository:
Applying Cart Promotions
The PromotionProcessor manages the application of cart promotions:
Reverts any existing promotions on the order.
Checks the eligibility of all available promotions for the order.
Applies eligible promotions.
Applying a Promotion Manually
To apply a 10% discount programmatically:
Promotion Filters
Filters allow actions to target specific groups of products. For example, use a TaxonFilter to apply a promotion only to items within a specific taxon.
Check these scenarios on promotion filters to have a better understanding of them.
Last updated