Filterungen nach Eigenschaftsoptionen

Hallo,

ich habe Filterungen nach Eigenschaftsoptionen auf der Produktlistenseite und versuche, dies so zu gestalten, dass beispielsweise bei Auswahl einer Herstelleroption nur einige Optionen nach der Größeneigenschaft angezeigt werden.

Dazu habe ich versucht, die Kriterien mit ProductListingCmsElementResolver oder ProductListingCollectFilterEvent zu überschreiben.

Ich habe ein paar Tage daran gearbeitet, leider kann es nicht hinbekommen.

Also die Frage wäre:
Wie & wo kann die Aggregationsoptionen überschreiben?

Weitere Informationen:
im Twig Template gibt es ein Foreach für Optionen (property.options):
Storefront/storefront/component/listing/filter-panel.html.twig

{% sw_include '@Storefront/storefront/component/listing/filter/filter-property-select.html.twig' with {
        elements: property.options,
        sidebar: sidebar,
        name: 'properties',
        displayName: property.translated.name,
        displayType: property.displayType,
        pluginSelector: 'filter-property-select',
        propertyName: property.translated.name
    } %}

Ich freue mich auf Ihre Antwort… Danke im Vorab! : )

Du kannst in den Admin-Einstellungen unter Produkte → Produkt die Option „Filteroptionen ohne Ergebnisse deaktivieren“ setzen. Dann werden nur Filter angezeigt, die auch Ergebnisse haben.

Wenn du unbedingt die Aggegations anpassen musst, dann kanns du die Result-Events nehmen:

public static function getSubscribedEvents()
{
    return [
        ProductListingResultEvent::class => 'onListingResult',
        ProductSearchResultEvent::class => 'onSearchResult',
        ...
    ];
}

public function onListingResult(ProductListingResultEvent $event)
{
    $this->filterResultAggregations($event->getResult()->getAggregations());
}

public function onSearchResult(ProductSearchResultEvent $event)
{
    $this->filterResultAggregations($event->getResult()->getAggregations());
}

private function filterAggregations(AggregationResultCollection $aggregations)
{
    if($aggregations->has('properties')){
        $properties = $aggregations->get('properties');
        ...

Vielen Dank für die Antwort!

Ich muss unbedingt die Aggregationen anpassen. Weil ich die Optionen der Eigenschaften manuell auswählen muss.

private function filterAggregations(AggregationResultCollection $aggregations)
{
    if($aggregations->has('properties')){
        $properties = $aggregations->get('properties');
        ...

Das Ergebnis erhalte ich auch aus ProductListingCmsElementResolver.php. Leider weiß ich nicht, wie ich die Optionen entfernen kann.

Ich habe hier beispielsweise 255 Optionen und möchte nur 10 davon anzeigen:

#elements: array:1 [▼
    "properties" => Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\Metric\EntityResult {#10912 ▼
      #extensions: []
      #name: "properties"
      #entities: Shopware\Core\Content\Property\PropertyGroupCollection {#32447 ▼
        #extensions: []
        #elements: array:8 [▼
          0 => Shopware\Core\Content\Property\PropertyGroupEntity {#32445 ▼
            #extensions: array:2 [▶]
            #_uniqueIdentifier: "56bdc48fe2d5430d9f84a618af066dd5"
            #versionId: null
            #translated: array:4 [▶]
            #createdAt: DateTimeImmutable @1697195048 {#17966 ▶}
            #updatedAt: null
            -_entityName: null
            -_fieldVisibility: null
            #name: "size"
            #displayType: "text"
            #sortingType: "alphanumeric"
            #description: "Size"
            #position: 1
            #filterable: true
            #visibleOnProductDetailPage: true
            #options: Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionCollection {#30535 ▼
              #extensions: []
              #elements: array:255 [▼
                "eb4b835b72a14081b8978a26267353dd" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#31742 …23}
                "443eabd6c0a14046aec2779214a049d0" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#24189 …23}
                "51313ec44879451fb40e4907eb810fcf" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#24549 …23}
                "5068b558a263406bbc5ff67364125785" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#24497 …23}
                "76dc2f20fecd4176ab4c88ac959615b9" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#26426 …23}
                "be967dbbf6984f14bd6498d8acb980d3" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#29725 …23}
                "368417e4b0d44fbcac107741b58715bc" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#23411 …23}
                "1127659168fd44c0b06242f3694a9ead" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#21735 …23}
                "d685e76e50cb4132839228f3d0897723" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#30589 …23}
....