Price Facet im Listing überschreiben

Hallo,

leider bin ich mit Facet´s nicht ganz so vertraut.

Ich würde gerne die Preise des Preisfilters im Listing “manipulieren”.

Ist es möglich, das bestehende Facet für die Preisrange zu subscriben. Wenn ja, wie?

Mit Hooks wäre es kein Problem, jedoch ich würde gerne den “best practice”-Weg nehmen, den ich noch nicht erkannt habe.

Besten Dank!

Hi,

auf dem Criteria-Objekt kannst du Facetten mit removeFacet(NAME) entfernen. Das müsste bspw. gehen, wenn du dir einen CriteriaRequest-Handler registrierst.

Ansonsten könntest du \Shopware\Bundle\SearchBundleDBAL\ProductNumberSearch::search dekorieren und dir das ProductNumberSearchResult zurück geben lassen. Mit getFacets bekommst du alle aktiven Facetten. Die Klasse hat keine Remove-Methode, darum müsstest du ein neues ProductNumberSearchResult instanziieren und $products, $totalCount und $facets aus dem Original-Objekt da reingeben - bis auf die Facette, die du entfernen willst. Also so etwa:

$result = new SearchBundle\ProductNumberSearchResult(
    $result->getProducts(),
    $result->getTotalCount(),
    array_filter($result->getFacets(), function(SearchBundle\FacetResultInterface $facet) {
        return $facet->getFacetName() != 'price';
     })
);
return $result;

Wie gesagt: removeFacet auf dem Criteria-Objekt ist sicher eleganter, wenn es geht.

Daniel

Hallo Daniel,

danke für deine ausführliche Antwort.

Soweit meine ich deine Beschreibung verstanden zu haben.

Was mir noch nicht ganz klar ist, aus welchen Kontext ich eingreifen soll. Sprich welches Event ich benutzen soll.