Ibexa Commerce 4.6 : créer une remise catalogue de 10 % — REX complet
Après les types de produits et les variantes, cette étape ajoute une vraie promotion à notre boutique de démonstration Ibexa Commerce 4.6.32. L’objectif est simple : appliquer automatiquement 10 % de remise au T-shirt et à ses six variantes, puis vérifier que le calcul reste correct dans le panier.
Ce que nous allons obtenir
- une règle personnalisée
demo_tshirt_10_percent; - une remise de type catalogue ;
- le produit parent
IBEXA-TSHIRTcomme cible ; - un prix passant de 29,90 € à 26,91 € HT ;
- une remise visible dans le catalogue, la fiche produit et le panier.
Remise catalogue ou remise panier ?
La différence est importante :
| Type | Moment du calcul | Exemple |
|---|---|---|
| Catalogue | Avant l’ajout au panier, directement sur le prix du produit | -10 % sur un T-shirt |
| Panier | Sur le panier selon son contenu ou le client | -20 € dès 150 € d’achat |
Ici, nous voulons que le client voie immédiatement le prix promotionnel. Nous utilisons donc une remise catalogue.
1. Installer les composants Discounts
Dans notre installation Commerce 4.6.32, les composants de remise étaient optionnels. Nous avons installé exactement les versions compatibles :
composer require ibexa/discounts:4.6.32 ibexa/discounts-codes:4.6.32
Les recettes Symfony Flex ajoutent les bundles, les routes, la configuration Messenger et les ressources nécessaires.
Sur une instance existante, il faut examiner le SQL avant de l’exécuter. Nous avons appliqué uniquement les tables Messenger et
ibexa_discount*, sans lancer aveuglément une mise à jour globale du schéma.
2. Décrire la promotion avec une migration
Nous avons séparé cette démonstration des migrations d’installation standard dans src/Migrations/Demo/12_tshirt_catalog_discount.yaml.
- type: product_discount
mode: create
identifier: demo_tshirt_10_percent
name: "T-shirt developer -10%"
discount_type: catalog
enabled: true
priority: 10
percentage: 10
label: "-10%"
conditions:
- type: is_product_in_array
product_codes:
- IBEXA-TSHIRT
Le point essentiel est la cible : IBEXA-TSHIRT est le produit parent. Ibexa applique ensuite la règle à ses variantes, notamment IBEXA-TSHIRT-BLACK-M. Il n’est donc pas nécessaire d’énumérer les six variantes.
3. Exécuter et réindexer
Après la migration, l’index des remises doit être reconstruit :
php bin/console ibexa:migrations:migrate
php bin/console ibexa:discounts:reindex
La réindexation rend la règle disponible au moteur de prix du storefront.
4. Vérifier la fiche produit
La fiche affiche maintenant le prix d’origine, le prix remisé et le badge -10 %. Nous avons ajouté une indication visuelle pour expliquer que le calcul est effectué avant l’ajout au panier.
Cette amélioration de thème reste une présentation. La remise elle-même est calculée par Ibexa Commerce : elle ne vient pas du CSS ni d’un prix saisi en dur.
5. Prouver le calcul dans le panier
Nous avons ajouté la variante noire en taille M au panier. L’API retourne un prix original de 2 990 centimes et un montant remisé de 2 691 centimes. Le DiscountStamp contient également :
- l’identifiant
demo_tshirt_10_percent; - le type
catalog; - le pourcentage
10; - la cible
IBEXA-TSHIRT.
Le calcul affiché est cohérent :
29,90 € - 2,99 € = 26,91 € HT
TVA 20 % = 5,38 €
Total TTC = 32,29 €
Ce que cette étape valide
Cette démonstration ne se limite pas à un badge promotionnel. Elle valide toute la chaîne : règle persistée, ciblage du parent, héritage par les variantes, indexation, prix storefront et calcul du panier.
Le prochain exercice logique sera différent : créer une remise panier, éventuellement activée par un code promotionnel, afin de comparer concrètement les deux mécanismes.



