Aller au contenu principal

Modéliser un catalogue complexe avec Sylius : variantes, attributs et taxons sans douleur

Corentin Boutillier
8 min de lecture
1 vues

Un catalogue riche est un atout… jusqu’au moment où la combinatoire explose. Dans Sylius, la flexibilité est totale, mais sans méthode on se retrouve vite avec des milliers de variantes ingérables, des filtres incohérents et une intégration PIM douloureuse. Voici un guide pratico-pratique pour modéliser un catalogue complexe dans Sylius, sans douleur.

Les briques du modèle Sylius à maîtriser

Avant d’entrer dans la stratégie, un rappel des concepts clés. Sylius est fondé sur un modèle clair et extensible :

  • Produit
    • Simple: aucun choix, 1 SKU.
    • Configurable: au moins une option; 1..n variantes.
  • Variante de produit: combinaison d’options vendable; porte le SKU, le stock, le prix (par canal).
  • Option / Valeur d’option: axes de variation (ex. Couleur, Taille) et leurs valeurs (Rouge, M, L).
  • Attribut: métadonnée descriptive non vendable (ex. Matière, Coupe, Longueur des manches).
  • Taxon: classification hiérarchique (navigation, SEO, merchandising).
  • Association / Type d’association: liens entre produits (accessoires, similaires, remplacement).
  • ChannelPricing: prix par canal et devise pour chaque variante.

Règle d’or: ce qui influence le stock, le SKU ou le prix est une variante (via options). Ce qui décrit et filtre sans impacter le SKU est un attribut. Ce qui structure la navigation est un taxon.

Attributs, options ou taxons ? La grille de décision

  • Utilisez des options si:
    • Le choix doit créer une référence vendable unique (SKU, stock), ex. Couleur, Taille, Capacité.
    • Le prix varie par combinaison (ChannelPricing par variante).
  • Utilisez des attributs si:
    • La donnée est descriptive et utile au filtrage (Matière, Composition, Marque, Pays).
    • La donnée peut changer sans impacter le SKU (ex. nouvelle description marketing).
  • Utilisez des taxons si:
    • Vous organisez la navigation ou des landing pages (ex. Vêtements > T-shirts).
    • Vous faites du merchandising (collections saisonnières) ou des segments SEO.
  • Utilisez des associations si:
    • Vous proposez des accessoires, des produits complémentaires, des remplacements.

Exemples:

  • T-shirt: Coloris + Taille = options/variantes; Matière = attribut; Catégorie T-shirts = taxon; “Va bien avec ce jean” = association.
  • Smartphone: Capacité + Couleur = options; OS, Poids = attributs; “Mobiles” = taxon; Coque compatible = association.

Concevoir une matrice de variantes à grande échelle

Le piège classique: la combinatoire. Quelques bonnes pratiques pour éviter l’explosion:

  1. Limitez les axes de variation
    • 2 axes (Couleur, Taille) est idéal; 3 axes restent gérables.
    • Au-delà, transformez un axe en attribut ou en personnalisation au panier (gravure, message).
  2. Codes stables et normalisés
    • Codes d’option et de valeur en SNAKE_CASE: SIZE, COLOR, SIZE_M, COLOR_RED.
    • Codes de variante = concaténation stable: PROD-COLOR_RED-SIZE_M.
  3. Liste blanche des combinaisons valides
    • Ne générez pas toutes les permutations. Autorisez seulement celles réellement produites.
  4. Prix et stock au bon niveau
    • Toujours au niveau variante (ChannelPricing + Inventory). Évitez les “deltas d’option” côté back-office par défaut.
  5. Génération et import maîtrisés
    • Pilotez la génération via un importeur (PIM/CSV/ETL) qui vérifie l’existence des valeurs d’option, crée uniquement les variantes valides et conserve les codes.

Exemple de fixtures (simplifiés) pour un T-shirt:

## config/fixtures/sylius_catalogue.yaml
sylius_fixtures:
  suites:
    catalogue:
      fixtures:
        product_option:
          options:
            color:
              code: COLOR
              translations:
                fr_FR: { name: "Couleur" }
              values:
                - { code: COLOR_RED, translations: { fr_FR: { value: "Rouge" } } }
                - { code: COLOR_BLACK, translations: { fr_FR: { value: "Noir" } } }
            size:
              code: SIZE
              translations:
                fr_FR: { name: "Taille" }
              values:
                - { code: SIZE_S, translations: { fr_FR: { value: "S" } } }
                - { code: SIZE_M, translations: { fr_FR: { value: "M" } } }
        product:
          products:
            tshirt_001:
              code: TSHIRT_001
              enabled: true
              translations:
                fr_FR: { name: "T-shirt coton premium", slug: "tshirt-coton-premium" }
              options: ["@COLOR", "@SIZE"]
              variants:
                - code: TSHIRT_001-COLOR_RED-SIZE_S
                  option_values: ["@COLOR_RED", "@SIZE_S"]
                  channel_pricings:
                    WEB: { price: 2490, original_price: 2990 }
                - code: TSHIRT_001-COLOR_BLACK-SIZE_M
                  option_values: ["@COLOR_BLACK", "@SIZE_M"]
                  channel_pricings:
                    WEB: { price: 2490 }

Conseils supplémentaires:

  • Exclusions: si une couleur n’existe pas dans une taille, ne créez pas la variante. Gérer cela au moment de l’import.
  • Images par valeur d’option: stockez des images par couleur; référencez-les sur chaque variante concernée pour éviter la duplication.
  • Personnalisation non-stockée: gravure, message, emballage cadeau = options de ligne de panier, pas variantes.

Taxons: navigation, SEO et merchandising sans confusion

Structurez vos taxonomies en couches:

  • Arbre principal de navigation
    • Exemple: Vêtements > Homme > T-shirts
    • Utilisé pour les menus et le fil d’Ariane.
  • Taxons SEO/merchandising
    • Collections: “Printemps 2025”, “Éco-responsable”.
    • Landing pages: “T-shirts rouges”, “Grandes tailles”.
  • Évitez d’encoder des propriétés en taxons (ex. “Coton”) si vous les avez déjà en attributs. Préférez des facettes de recherche basées sur attributs.

Bonnes pratiques:

  • 1 taxon “canonique” par produit pour le fil d’Ariane; d’autres taxons pour la mise en avant.
  • Nommage et codes stables: TAX_VETEMENTS_HOMME_TSHIRTS.
  • Générer des pages SEO basées sur taxons dédiés ou sur des pages dynamiques filtrées, mais attention aux contenus dupliqués (balises canoniques).

Associations: cross-sell, up-sell et compatibilité

Définissez des types d’associations clairs:

  • related_products: similaires ou recommandés
  • accessories: accessoires compatibles
  • replacements: remplacements/versions nouvelles

Exemple d’association en import:

## pseudo-payload d’import
{
  "product": "SMARTPHONE_X",
  "associations": {
    "accessories": ["CASE_X_BLACK", "WIRELESS_CHARGER_10W"],
    "replacements": ["SMARTPHONE_X_PLUS"]
  }
}

Tips:

  • Gérez les associations au niveau produit (plutôt que variante), sauf cas de compatibilité très fine.
  • Chauffez vos blocs recommandation en cache et exposez-les via des endpoints dédiés pour ne pas ralentir la PDP.

Préparer l’intégration à un PIM (Akeneo, Pimcore…)

La frontière des responsabilités est clé pour une intégration sereine.

Responsabilités typiques:

  • PIM “owner”:
    • Arborescence attributaire, familles, libellés, médias, valeurs d’option, descriptions.
    • Sélection des options/valeurs par produit, whitelist des combinaisons valides.
  • Sylius “owner”:
    • Variantes vendables, ChannelPricing, stock, statut de publication, taxons de navigation, SEO local.
    • Règles de promotion, transport, taxes.

Stratégie de mapping:

  • Famille PIM → gabarit produit Sylius (+ mapping attributs).
  • Attribut PIM → attribut Sylius (type, locale, scopage).
  • Option PIM → option Sylius; valeur d’option PIM → valeur d’option Sylius (codes identiques).
  • Produit PIM → produit Sylius; Variantes PIM (si existantes) → variantes Sylius (codes identiques si possible).

Exemple de configuration de mapping (fictif):

## config/packages/pim_mapping.yaml
pim_catalog_mapping:
  families:
    tshirts:
      sylius_template: "tshirt_template"
      options: [COLOR, SIZE]
      attributes:
        material: MATERIAL
        fit: FIT
  channels:
    ecommerce_fr: WEB

Pipeline d’import:

  1. Synchroniser options et valeurs d’option (création/mise à jour).
  2. Synchroniser attributs et listes de valeurs.
  3. Créer/mettre à jour produits.
  4. Générer variantes valides (whitelist PIM); aligner codes.
  5. Appliquer taxons; pousser médias.
  6. Mettre à jour prix par canal et stock depuis ERP/WMS.

Astuce: séparez les flux “enrichissement PIM” et “opérationnel” (prix/stock). Deux jobs, deux responsabilités, deux SLAs.

Performance et UX: éviter le “lag” des PDP

  • Pré-calcul “read model”:
    • Construisez un JSON de variantes par produit (codes, images, disponibilité, prix) pour hydrater le sélecteur en 1 requête.
  • Indexation recherche:
    • Dénormalisez attributs et taxons dans votre index (Elasticsearch/Meilisearch) pour des facettes instantanées.
  • Pagination des variantes:
    • Pour les produits à >200 variantes, chargez les variantes “du moment” (plus vendues) et lazy-load les autres.
  • Caching:
    • Cache HTTP par produit et clé de canal/locale. Invalidez finement sur changement de prix/stock.

Check-list de mise en œuvre

  • Nommage et codes stables définis (produits, variantes, options, attributs, taxons).
  • Grille de décision documentée: attribut vs option vs taxon vs association.
  • Axes de variantes limités (≤3) et whitelist des combinaisons valides.
  • Génération des variantes pilotée par import; pas de tout-généré par défaut.
  • ChannelPricing et stocks gérés au niveau variante.
  • Taxons: un arbre de navigation + taxons merchandising/SEO séparés.
  • Associations typées et peu nombreuses; maintenance via PIM ou BO.
  • Stratégie d’intégration PIM définie (mapping, ordonnancement, SLAs).
  • Read model/JSON de variantes pour la PDP; index de recherche facetté.
  • Jeux de fixtures réalistes pour QA et tests de performance.

Conclusion: transformez la complexité en avantage compétitif

La bonne modélisation d’un catalogue Sylius n’est pas un détail technique: c’est la condition d’une expérience fluide pour vos équipes et vos clients. En séparant clairement attributs, options, taxons et associations, en maîtrisant la matrice de variantes et en préparant l’intégration PIM, vous gardez la main sur la complexité sans sacrifier la vitesse.

Besoin d’un audit de votre modèle ou d’un atelier de cadrage PIM/Sylius ? Contactez-nous pour co-construire une architecture robuste et prête à scaler.

Partager cet article

Logo Vulcain Développement - Développeur Symfony expert vulcain.agency

Développeur Full-Stack freelance expert
Créateur d'applications web sur mesure

📧 vulcain.developpement@gmail.com
📍 Saint-Lô, France

🏗️ Développement Symfony

🔗 API Platform

🏢 Solutions Métier

Liens Rapides