Hallo, ich möchte gern das Suchergis aus Shopware_Controllers_Frontend_AjaxSearch::doSearch manipulieren. getReturn bringt mir nur „true“. Wie komme ich an das Suchergebnis ran? vielen Dank.
374 Zugriffe und keine Antwort ;-(
naja, der Rückgabewert ist ja nur true Da wirst du nur mit Replace weiterkommen. Sprich die komplette Funktion überschreiben. Ich denke einen anderen Weg gibt es nicht.
In der Shopware_Controllers_Frontend_AjaxSearch::doSearch() kannst du doch sogar über ein Filter Event einen eigenen Adapter setzen. Also einfach einen eigenen Adapter schreiben, diesem zb vom Default Adapter erben und dort deine Änderungen machen. Oder setz dich mit einen after hook nach doSearch(), hol dir mit getResults() die Ergebnisse und setze sie mit setResults() neu. Viele Grüße
[quote=„Aquatuning GmbH“]In der Shopware_Controllers_Frontend_AjaxSearch::doSearch() kannst du doch sogar über ein Filter Event einen eigenen Adapter setzen. Also einfach einen eigenen Adapter schreiben, diesem zb vom Default Adapter erben und dort deine Änderungen machen. Oder setz dich mit einen after hook nach doSearch(), hol dir mit getResults() die Ergebnisse und setze sie mit setResults() neu. Viele Grüße[/quote] hi, vielen dank für deine Antwort. Filter-Event hatte ich schon probiert, da bin ich irgend wie auch cniht wieter gekommen. Wenn ich einen Hook nach doSearch registriere bekome ich mit getResults auch nix zurück. /\*\* \* AjaxSearch Hook \* \*/ private function subscribeEvents() { $this-\>subscribeEvent( 'Shopware\_Controllers\_Frontend\_AjaxSearch::doSearch::after', 'afterDoAjaxSearch' ); } /\*\* \* @param Enlight\_Hook\_HookArgs $args \*/ public function afterDoAjaxSearch(Enlight\_Hook\_HookArgs $args) { $results = $args-\>getResults(); Shopware()-\>Debuglogger()-\>info('', $results); }
auch wenn ich versuche mit $args->setResults() das result zu überschreiben passiert nix. irgendwo ist hier doch der Wurm drin…
ich habe gerade gesehen, dass getResults protected ist…
Oh… richtig. Du kannst natürlich auch einen after hook auf getResults() setzen und dort direkt die Rückgabe manipulieren. Die “sauberste” Methode ist aber weiterhin der eigene Search Adapter, den du über das Filter Event injizierst. Viele Grüße
Ok, danke. Ich muss mal schauen wie ich das mit dem Adapter gelöst kriege. Gesendet von meinem iPhone mit Tapatalk
hi, ich komme hier irgend wie nicht richtig weiter. Für die normale Suchergebnisseite manipuliere ich jetzt einfach die Templatevariable $sSearchResults. Das ist zwar irgendwie dirty, funktioniert aber gut. Für die AjaxSearch klappt das aber nicht. Wenn ich mich für Enlight_Controller_Action_Frontend_AjaxSearch_Index registriere ist Enlight_Event_EventArgs leer. Hier komme ich also so auch cniht an die View ran. Jetzt dachte ich mir, ich mache einfach einen Hook auf Shopware_Components_Search::getAdapter::after und setze einen eigenen Adapter. aber hier kann ich mich so nicht einhängen. Auf das Filter-Event in Shopware_Controllers_Frontend_AjaxSearch::doSearch() kann ich mich zwar registrieren aber hier komme ich auch nicht weiter. Hier habe ich ja keinerlei Parameter zur Verfügung. Hat jemand noch mal einen Ansatz oder Code-Schnipsel wie ich an das SearchResult der AjaxSearch komme? vielen Dank.
falls du das Problem noch nicht gelöst hast, hier ein Ansatz: (musste bei mir das Ergebnis auch “modifizieren”, da ich noch article_attributes eingebaut habe welche ausgewertet werden müssen) ich habe ein Plugin wo ich all meine Modifys mache, dort habe ich dann einen Event-Listener eingebaut $this-\>subscribeEvent( 'Shopware\_Controllers\_Frontend\_Search\_SelectAdapter', 'searchadapter',100 );
dann natürlich noch public function searchadapter(Enlight\_Event\_EventArgs $args) { $this-\>Application()-\>Loader()-\>registerNamespace( 'Shopware\_Components', $this-\>Path() . 'Components/' ); $adapter=new Shopware\_Components\_Search\_Adapter\_Default(Shopware()-\>Db(), Shopware()-\>Cache(), new Shopware\_Components\_Twajaxsearch(), Shopware()-\>Config()); return $adapter; }
in dieser Funktion ist der angepasste Parameter mit deiner eigenen Klasse wichtig im Ordner Components dann noch die Klasse, welche einfach von der Search Result erbt da drin kannst du dann die Funktionen überschreiben und machen was du willst class Shopware\_Components\_Twajaxsearch extends Shopware\_Components\_Search\_Result\_Abstract{ public function getResult() { $ergebniss=$this-\>result; /\* modify am ursprünglichen ergebnis array \*/ return $ergebniss; } }
um dann auch noch die korrekte Anzahl der Ergebnisse auszugeben einfach public function getResultCount(){ return count($this-\>getResult()); }
mit einfügen