Guide Technique : Ajouter une Nouvelle Règle de Promotion Basée sur la Quantité d’un Taxon dans Sylius
Lilian
6 septembre 2024Dans cet article, nous allons passer en revue les étapes pour ajouter une nouvelle règle de promotion dans Sylius, basée sur la quantité minimale de produits appartenant à un taxon spécifique. Cette règle appliquera une réduction si le panier contient une quantité définie d'articles associés à un ou plusieurs taxons.
Création du Formulaire pour l'administrateur
La configuration de la règle se fait via un formulaire personnalisé où l'utilisateur peut spécifier la quantité minimale et sélectionner les taxons concernés via un champ autocomplété.
Le fichier se situe dans src/Form/Type/Rule/NomDeLaConfigurationType.php.
Exemple de code pour :
<?php namespace App\Form\Type\Rule; use Sylius\Bundle\TaxonomyBundle\Form\Type\TaxonAutocompleteChoiceType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\IntegerType; use Symfony\Component\Form\FormBuilderInterface; use Sylius\Bundle\CoreBundle\Form\DataTransformer\TaxonsToCodesTransformer; class QuantityTaxonConfigurationType extends AbstractType { private TaxonsToCodesTransformer $taxonsToCodesTransformer; public function __construct(TaxonsToCodesTransformer $taxonsToCodesTransformer) { $this->taxonsToCodesTransformer = $taxonsToCodesTransformer; } public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('quantity', IntegerType::class, [ 'label' => 'Quantité minimum', ]) ->add('taxons', TaxonAutocompleteChoiceType::class, [ 'label' => 'sylius.form.promotion_rule.has_taxon.taxons', 'multiple' => true, // Permet de sélectionner plusieurs taxons ]); // Ajout du ModelTransformer pour transformer les taxons en codes $builder->get('taxons')->addModelTransformer($this->taxonsToCodesTransformer); } public function getBlockPrefix(): string { return 'app_promotion_rule_quantity_taxon_configuration'; } }
Explication du Code :
TaxonAutocompleteChoiceType
: Ce champ permet à l'utilisateur de sélectionner des taxons via un champ d'autocomplétion.
TaxonsToCodesTransformer
: Ce transformateur convertit les objetsTaxon
en leurs codes lors de la soumission du formulaire, ce qui permet d'utiliser ces codes dans la logique de la règle.
Création de la Classe qui implémente la règle
La première étape consiste à créer une classe personnalisée qui implémente l'interface RuleCheckerInterface
. Cette classe est responsable de vérifier si les conditions de la promotion sont remplies.
Le fichier se situe dans src/Promotion/Checker/Rule/NomDeLaRegleChecker.php.
Exemple de code :
<?php namespace App\Promotion\Checker\Rule; use Sylius\Component\Core\Model\OrderInterface; use Sylius\Component\Promotion\Checker\Rule\RuleCheckerInterface; use Sylius\Component\Promotion\Model\PromotionSubjectInterface; class QuantityTaxonRuleChecker implements RuleCheckerInterface { const TYPE = 'quantity_taxon'; public function isEligible(PromotionSubjectInterface $subject, array $configuration): bool { if (!$subject instanceof OrderInterface) { return false; } $taxons = $configuration['taxons']; // Liste des codes de taxons $requiredQuantity = $configuration['quantity']; $totalQuantity = 0; foreach ($subject->getItems() as $item) { // Obtenir le taxon principal du produit $productTaxon = $item->getProduct()->getMainTaxon(); // Vérifier si le produit appartient à l'un des taxons de la liste if ($productTaxon && in_array($productTaxon->getCode(), $taxons, true)) { $totalQuantity += $item->getQuantity(); } } return $totalQuantity >= $requiredQuantity; } }
Explication du Code :
isEligible
: Cette méthode vérifie si le panier contient au moins la quantité requise d'articles appartenant à un ou plusieurs taxons spécifiques.- Vérification des taxons : La méthode compare le code des taxons configurés à celui des produits dans le panier.
Configuration des Services
Après avoir créé la règle et le formulaire, vous devez enregistrer ces services dans la configuration de Sylius via config/services.yaml.
Exemple de configuration :
services: app.promotion_rule_checker.quantity_taxon: class: App\Promotion\Checker\Rule\QuantityTaxonRuleChecker tags: - { name: sylius.promotion_rule_checker, type: quantity_taxon, form_type: App\Form\Type\Rule\QuantityTaxonConfigurationType, label: 'Total taxon' } app.form.type.promotion_rule.quantity_taxon_configuration: class: App\Form\Type\Rule\QuantityTaxonConfigurationType arguments: $taxonsToCodesTransformer: '@sylius.form.type.data_transformer.taxons_to_codes' tags: - { name: form.type }
Explication :
app.promotion_rule_checker.quantity_taxon
: Cette ligne enregistre la règle personnalisée dans Sylius sous le typequantity_taxon
. Elle associe également la classe de formulaire qui permet de configurer la règle.app.form.type.promotion_rule.quantity_taxon_configuration
: Cette ligne enregistre le formulaire de configuration en injectant leTaxonsToCodesTransformer
pour transformer les taxons en codes.
Utilisation de la Nouvelle Règle dans l'Administration de Sylius
Une fois la règle et le formulaire correctement configurés et enregistrés, vous pouvez créer une nouvelle promotion via l'interface d'administration de Sylius. Dans la section des règles de promotion, vous pourrez choisir la règle Total taxon
et configurer les taxons et la quantité minimum.
- Quantité minimum : La quantité d'articles appartenant aux taxons sélectionnés qui doit être atteinte pour que la promotion soit appliquée.
- Taxons : Les taxons pour lesquels la promotion est applicable.
Conclusion
Ce guide explique comment ajouter une nouvelle règle de promotion dans Sylius basée sur la quantité d'articles d'un taxon. Nous avons couvert la création de la classe de vérification, la configuration du formulaire, et l'enregistrement des services dans Sylius. Grâce à ces étapes, vous pouvez personnaliser davantage les règles de promotion pour mieux répondre aux besoins de votre boutique.