Alles wat u wilt weten voordat u installeert.
Een gedetailleerde blik op hoe Dynamic Product Groups subcategorieën Shopware 6: DfStreamCategoryTree, recursief categoriefilter inclusief onderliggende categorieën werkt, waarom we het zo gebouwd hebben en de gedachte achter de bovenstaande functies.
Waarom het native categoriefilter niet in de boomstructuur afdaalt
De voorwaardenbouwer van de dynamische productgroepen stelt een veld Categories beschikbaar dat de relatie product.categoriesRo bevraagt. Die relatie somt alleen de categorieën op waaraan een product expliciet is gekoppeld op zijn tabblad Categories. Een goed georganiseerde catalogus brengt zijn producten onder in de bladcategorieën: een sneakermodel zit in Heren, Schoenen, Sneakers, niet in Heren. Het gevolg is mechanisch: een filter op Heren geeft alleen de zeldzame producten terug die rechtstreeks aan dat niveau zijn toegewezen. Dat is geen bug, het is het gedocumenteerde gedrag van de relatie, maar het verrast steevast op het moment dat u een merchandisingstream voor een hele familie wilt maken.
Wat product.categoryTree doet
Shopware onderhoudt voor elk product al een JSON-veld genaamd categoryTree dat de id bevat van alle categorieën op het pad, van de wortel tot de categorie van toewijzing. Dat veld wordt herberekend door de CategoryIndexer bij elke verplaatsing van een categorie en bij elke wijziging van een producttoewijzing. Het wordt intern door de storefront gebruikt voor de categorielijsten. Een equalsAny-filter op dat veld met de id van een bovenliggende categorie haalt dus alle producten op waarvan het pad daarlangs loopt, ongeacht de diepte. Het veld bestaat en werkt in het DAL, maar de administratie biedt het niet aan in de kiezer van de voorwaardenbouwer: het staat niet in de allowlist van de service productStreamConditionService.
De precieze rol van de plugin
DfStreamCategoryTree voegt één regel toe aan die allowlist en levert de bijbehorende vertaalde labels. Dat is alles, en dat is bewust. Hij introduceert geen service decorator, geen listener op productgebeurtenissen, geen tabel, geen migratie. Het filter dat in de interface wordt gebouwd is een volstrekt standaard DAL-filter, geëvalueerd door dezelfde engine als de andere voorwaarden van de stream. Dat betekent ook dat een stream die met deze plugin is geconfigureerd leesbaar en bruikbaar blijft, zelfs als de plugin later wordt uitgeschakeld: het filter blijft aan de DAL-kant werken, alleen de weergave van het veld in de interface verdwijnt.
Typische toepassingen
Een navigatiecategoriepagina gevoed door een dynamische groep op een hele productfamilie, zonder de subcategorieën handmatig op te sommen. Een promotieregel die een korting toepast op een hele afdeling, subafdelingen inbegrepen. Een automatisch cross-sellingblok gebouwd op de afdeling waartoe het bekeken product behoort. Een exportfeed of een Shopping Experience blok gevoed door een stream die een hele tak van de catalogus moet weerspiegelen. In al die gevallen dwingt de native versie u om de configuratie bij elke nieuwe subcategorie opnieuw te openen. De categoryTree-versie vraagt geen enkel onderhoud.
Installatie en rebuild van de administratie
De plugin wordt geïnstalleerd door een ZIP te uploaden in Extensies, Mijn extensies, of door de map in custom slash plugins te plaatsen gevolgd door plugin:refresh en plugin:install --activate. Omdat hij het gedrag van de administratie aanpast, is na de installatie eenmalig een rebuild van de adminbundel nodig via het commando build-administration of bin slash console bundle:dump gevolgd door de compilatie. Op een productieomgeving die door een deploymentpipeline wordt beheerd maakt die rebuild meestal al deel uit van de standaardstappen. Zodra de administratie opnieuw is gecompileerd verschijnt het veld onmiddellijk in de voorwaardenkiezer, zonder pluginconfiguratie die u moet invullen.
Wat de plugin niet doet
Hij vervangt het native Categories-filter niet, hij komt ernaast te staan. Hij wijzigt het indexeringsalgoritme van de categorieën of de berekening van de categoryTree niet, hij gebruikt wat Shopware al produceert. Hij geldt niet voor de listingfilters van de storefront of voor de facetnavigatie, die onder een ander mechanisme vallen. Hij werkt niet op Shopware Cloud, omdat de door Shopware gehoste SaaS-versie de installatie van serverplugins niet toestaat. Tot slot pretendeert hij niet de evaluatie van de streams te versnellen: omdat het veld native en geïndexeerd is, is de evaluatiekost die van een standaardfilter, niet meer en niet minder.
There are no reviews yet.