Ich versuche gerade, die Suchergebnisse um einige Parameter zu erweitern. Bis Version 4.3 konnte man dies recht elegant über das Event „Shopware_Controllers_Frontend_Search_ModifySearchResult“ aus dem search-Controller in der Funktion defaultSearchAction erledigen. Leider gibt es in der aktuellen Version 5.2 hier kein solches Event mehr, sodass man eigentlich nur noch die Funktion hooken kann. Nicht sehr elegant, und man muss fast den ganzen Controller nachbauen, was ja auch nicht gerade sinnvoll ist. Das Problem ist, dass ich Informationen aus den Suchergebnissen brauche, die ich im Template anzeigen möchte, aber die aktuelle Funktion diese Infos nicht dem View zur Verfügung stellt.
Man kann sich zwar hier über die Session-Variablen und einen „Shopware_Controllers_Frontend_Search::defaultSearchAction::after“ auf die Funktion behelfen, elegant ist aber anders. Hat hierzu jemand noch eine bessere Idee?
Keine Ahnung was du vorhast, aber du kannst das wahrscheinlich über eine neue criteria in die shopware_search.product_search auf die Events Enlight_Controller_Action_PostDispatch_Frontend_AjaxSearch und/oder Enlight_Controller_Action_Frontend_Search_defaultSearch und/oder Enlight_Controller_Action_PostDispatchSecure_Frontend_Search lösen können.
Vielleicht stehe ich ja auf dem Schlauch - aber wenn ich mich in den Events befinde, habe ich keinen direkten Zugriff auf das eigentliche Suchergebnis des Service, sondern nur auf die Ergebnisse im View. In der Funktion defaultsearch wird über
/**@var $result ProductSearchResult*/
$result = $this->get(‘shopware_search.product_search’)->search($criteria, $context);
aus dem Such-Service das Ergebnis geholt und danach gleich in View-Variablen die Ergebnisse bereitgestellt. Wenn ich in den oben genannte Events bin, erhalte ich aber keinen Zugriff auf $result, da das ja einfach eine lokale Variable ist. Nun könnte ich natürlich das gleiche Suchergebnis nochmal abfragen und die entsprechenden Werte setzen, das fände ich aber ziemlich sinnfrei. Wie gesagt, in Versionen vor 5 gab es in der defaultSearch ein eigenes Event, welches dann das Suchergebnis mitgegeben hatte, damit konnte man dann seine eigenen Auswertungen machen…
Da ich selbst den Such-Service geschrieben habe, könnte ich natürlich auch gleich dort in den View die entsprechenden Daten schreiben, habe aber im Service keine Idee, wie ich den aktuellen View finde. Daher derzeit der Umweg über die Session-Variablen, die ich dann in einem der obigen Events wieder lese und in View-Variablen umsetze.
Nach ein wenig Experimentieren, habe ich die Angelegenheit nun anders gelöst. Da ich ja selbst Datenlieferant im eigenen Search-Service bin, habe ich mir dort einfach ein paar Public-Variablen/Funktionen angelegt, die die nötigen Daten speichern. Dann hole ich mir einfach im Event Enlight_Controller_Action_PostDispatchSecure_Frontend_Search über
$searchService = Shopware()->Container()->get(‚shopware_search.product_search‘);
den Suchservice und kann damit dann meine Erweiterungen des View erarbeiten, indem ich einfach auf die Variablen zugreife.
Bleibt immernoch das Problem für diejenigen, die nur die Suche erweitern, nicht aber gleich einen eigenen Service erstellen wollen.
1 „Gefällt mir“