Tout ce que vous voudriez savoir avant d'installer.
Un regard détaillé sur le fonctionnement de Dynamic Product Groups Sous-catégories Shopware 6 — DfStreamCategoryTree : filtre catégorie récursif incluant les catégories enfants, pourquoi nous l'avons conçu ainsi, et la réflexion derrière les fonctionnalités ci-dessus.
Pourquoi le filtre catégorie natif ne descend pas dans l'arborescence
Le constructeur de conditions des groupes de produits dynamiques expose un champ Categories qui interroge la relation product.categoriesRo. Cette relation liste uniquement les catégories auxquelles un produit est explicitement rattaché dans son onglet Categories. Un catalogue correctement organisé range ses produits dans les catégories feuilles : un modèle de sneakers est dans Homme, Chaussures, Sneakers, pas dans Homme. La conséquence est mécanique : un filtre sur Homme ne retourne que les rares produits affectés directement à ce niveau. Ce n'est pas un bug, c'est le comportement documenté de la relation, mais il surprend systématiquement au moment de créer un stream de merchandising sur une famille entière.
Ce que fait product.categoryTree
Shopware maintient déjà, pour chaque produit, un champ JSON nommé categoryTree qui contient l'identifiant de toutes les catégories du chemin, de la racine jusqu'à la catégorie d'affectation. Ce champ est recalculé par le CategoryIndexer à chaque déplacement de catégorie et à chaque changement d'affectation produit. Il est utilisé en interne par le storefront pour les listings de catégorie. Un filtre equalsAny sur ce champ avec l'identifiant d'une catégorie parente remonte donc tous les produits dont le chemin passe par elle, quelle que soit la profondeur. Le champ existe et fonctionne dans le DAL, mais l'administration ne le propose pas dans le sélecteur du constructeur de conditions : il n'est pas dans la liste d'autorisation du service productStreamConditionService.
Le rôle exact du plugin
DfStreamCategoryTree ajoute une ligne à cette liste d'autorisation et fournit les libellés traduits associés. C'est tout, et c'est volontaire. Il n'introduit aucun décorateur de service, aucun listener sur les événements produit, aucune table, aucune migration. Le filtre construit dans l'interface est un filtre DAL parfaitement standard, évalué par le même moteur que les autres conditions du stream. Cela signifie aussi qu'un stream configuré avec ce plugin reste lisible et exploitable même si le plugin est désactivé plus tard : le filtre continue de fonctionner côté DAL, seul l'affichage du champ dans l'interface disparaît.
Cas d'usage typiques
Une page de catégorie de navigation alimentée par un groupe dynamique sur toute une famille produit, sans lister les sous-catégories à la main. Une règle de promotion qui applique une remise sur l'ensemble d'un rayon, sous-rayons compris. Un bloc de cross-selling automatique construit sur le rayon d'appartenance du produit consulté. Un flux export ou un bloc Shopping Experience alimenté par un stream qui doit refléter une branche entière du catalogue. Dans tous ces cas, la version native impose de rouvrir la configuration à chaque nouvelle sous-catégorie. La version categoryTree ne demande aucune maintenance.
Installation et rebuild administration
Le plugin s'installe par upload de ZIP dans Extensions, Mes extensions, ou par dépôt du dossier dans custom slash plugins puis plugin:refresh et plugin:install --activate. Comme il modifie le comportement de l'administration, un rebuild du bundle admin est nécessaire une fois après l'installation via la commande build-administration ou bin slash console bundle:dump suivi de la compilation. Sur un environnement de production géré par un pipeline de déploiement, ce rebuild fait généralement déjà partie des étapes standard. Une fois l'administration recompilée, le champ apparaît immédiatement dans le sélecteur de conditions, sans configuration plugin à renseigner.
Ce que le plugin ne fait pas
Il ne remplace pas le filtre Categories natif, il s'ajoute à côté. Il ne modifie pas l'algorithme d'indexation des catégories ni le calcul du categoryTree, il consomme ce que Shopware produit déjà. Il ne s'applique pas aux filtres de listing du storefront ni à la navigation à facettes, qui relèvent d'un autre mécanisme. Il ne fonctionne pas sur Shopware Cloud, la version SaaS hébergée par Shopware n'autorisant pas l'installation de plugins serveur. Enfin, il ne prétend pas accélérer l'évaluation des streams : le champ étant natif et indexé, le coût d'évaluation est celui d'un filtre standard, ni plus ni moins.
Il n’y a pas encore d’avis.