CategoryFacet im Frontend nutzen?

Hallo, Wir benötigen einen Kategoriefilter. Im Core gibt es ja schon das CategoryFacet und CategoryFacetHandler etc. Kann man den Kategoriefilter irgendwie auch im Frontend ausgeben? Auf der Seite https://developers.shopware.com/develop … ch-bundle/ habt ihr sogar einen Screenshot zu „TreeFacetResult“ mit den Kategorien. Genau das brauchen wir! Allerdings ist uns gerade nicht klar, wie man das bewerkstelligt. Wir würden ungerne die Komplette Logik in einem Plugin reimplementieren. Wir würden nur gerne wissen, welcher Schritt notwendig ist, um den Kategoriefilter im Frontend auszugeben. Für jegliche Hilfestellung wären wir äußerst dankbar! Grüße Edit: Hier der besagte Screenshot aus der Doku:

*push* Anyone?

Hi, 1) Zum Criteria-Object einfach folgendes hinzufügen $criteria-\>addFacet(new CategoryFacet()); Vorsicht: In der Methode \Shopware\Bundle\SearchBundle\StoreFrontCriteriaFactory::createListingCriteria werden Category-Facetten explizit entfernt! Wenn du also bspw. die \sArticles::sGetArticlesByCategory erweitern möchtest, musst du dafür sorgen, dass dein Code *danach* die Facet hinzufügt. Zum Testen kannst du das bspw. in die \sArticles::getListing ganz oben einbauen. 2) In der Methode \Shopware\Bundle\SearchBundleDBAL\FacetHandler\CategoryFacetHandler::createTreeFacet wird am Ende das TreeFacetResult erzeugt. Aus irgendwelchen Gründen wird da als letzter Parameter “null” gesetzt und damit das Template auf “null” gesetzt, wodurch Shopware die Facet nicht anzeigt. Ich habe den letzten Parameter probeweise entfernt - dann wird mir eine Kategoriefacette im Listing angezeigt. Das Template lautet “frontend/listing/filter/facet-value-tree.tpl” - falls du das suchst. Momentan müsste man mMn. den CategoryFacetHandler dekorieren, das erzeugte TreeFacetResult auslesen und ein neues zurück geben, das ein korrektes Template definiert hat. Besten Gruß, Daniel

Das hat übrigens wunderbar funktioniert. Wir haben zwar die CategoryFacetHandler komplett neu geschrieben, da wir einiges ändern mussten, aber sonst konnten wir alles reusen. Danke nochmals!

[quote=“dreitags”]Das hat übrigens wunderbar funktioniert. Wir haben zwar die CategoryFacetHandler komplett neu geschrieben, da wir einiges ändern mussten, aber sonst konnten wir alles reusen. Danke nochmals![/quote] Hallo, könntest du mir evtl. die Lösung bereitstellen oder mir helfen, da bei uns (Shopware Version 5.0.4) die Einbindung des CategoryFacets mit dem TreeFacetResult auch nicht funktioniert und die angesprochenen Einstellungen von Daniel Nögel (shopware AG) immernoch in den entsprechenden System-Dateien sind (also dass das Category-Facet vor der Ausgabe entfernt wird mit $criteria->removeFacet(‘category’); und das Template auf null gesetzt wird). Ich habe probehalber $criteria->removeFacet(‘category’); auskommentiert und wie angesprochenen den letzten Parameter entfernt: return new TreeFacetResult( $facet-\>getName(), $this-\>fieldName, empty($active), $this-\>snippetNamespace-\>get($facet-\>getName(), 'Categories'), $values, [] ); Nur leider zeigt er mir das Listing der Kategorien nun fehlerhaft an, das heisst, gar keine Artikel mehr und auch die Funktionen (wie das Aufklappen von Filtern) funktionieren gar nicht mehr. Oder muss ich das angesprochene Template facet-value-tree.tpl auch innerhalb meines Plugins extra bereitstellen? Als Beispiel habe ich das von shopware bereitgestellte genutzt (und entsprechende Anpassungen vorgenommen wie $criteria->addFacet(new CategoryFacet())): https://developers.shopware.com/example … Filter.zip. Beste Grüße Sebastian

Hey, hier mal die handleRequest() Funktion unseres CriteriaRequestHandler: /\*\* \* @inheritdoc \*/ public function handleRequest( Request $request, Criteria $criteria, ShopContextInterface $context ) { $cat = $request-\>getParam('c'); if($cat != '') { $criteria-\>addBaseCondition(new CategoryCondition(explode('|', $cat))); } $criteria-\>addFacet(new DtgsCategoryFacet()); } Als Facethandler haben wir unsere eigene Facet geschrieben, dabei aber eigentlich zu weiten Teilen das Original übernommen, da wir einige Teile ändern müssten. Sollte auch mit dem Original klappen. Viele Grüße, Constantin