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
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');
...