GELÖST: Action per Plugin überschreiben/austauschen

Hi, ich sitze gerade mal wieder an einer Plugin Programmierung. Und zwar wollte ich die action “searchAction” des Search Controllers mit meinem Plugin überschreiben bzw neugestalten. Mein Aufruf im Plugin sieht also folgend aus: $event = $this-\>createEvent('Enlight\_Controller\_Action\_Frontend\_Search\_Search', 'onSearch'); $this-\>subscribeEvent($event); Ziel wäre es die Ausgabe von der searchAction: public function searchAction() zu überschreiben. Testweise habe ich nun die Original action “kopiert” Plugintechnisch angepasst und wollte mir nun das Suchergebniss anders eingeschränkt ausgeben lassen. So und nun zum Problem: Ich wollte nun ungern eine neue Template Datei nutzen deshalb war mein Ziel die Werte in die Standard Variable zu schreiben: $view-\>sSearchResults = $articles; Dies hat aber leider keine Auswirkungen. Ich habe folgendes getestet: Ich habe mir mit hilfe des print_r Befehls ein paar der Arrays etc ausgeben lassen um sicherzustellen das mein Plugin im Search Controller ausgeführt wird, diese werden mir unter dem Shop auch einwandfrei ausgegeben also sieht das erstmal gut aus. Ich habe mir auch das “$articles” und das “$view->sSearchResults” ausgeben lassen und die beiden Ausgaben stimmen überein aber Sie stimmen nicht mit dem im Template sichtbaren Ergebniss überein. Also war für mich die wahrscheinlichste “Lösung” das die Variable doch nochmal irgendwo anders in einer höheren Instanz befüllt wird. Testweise habe ich nun in meinem Plugin den assign auskommentiert, meiner Meinung nach dürfte nun garkeine Ausgabe mehr im Tpl erscheinen. Dies ist aber nicht der Fall ich bekomme weiterhin ein Ergebnisslisting ausgegeben. Kann mir das irgendwer erklären? Ich wäre superglücklich wennn mir hier jemand hilft da ich hier leider nichtmehr weiter weiss. Vielen Dank

Hi, damit nicht die org. Search-Action ausgeführt wird, muss das Event das mitteilen. Das geht über folgende 2 Wege: static function onSearch($eventArgs) { ... $eventArgs-\>setProcessed(true); // oder einfach: return false; } Ansonsten werden wahrscheinlich deine Variablen von den org. Variablen überschrieben. Heiner

2 Likes

Super, vielen Dank das funktioniert soweit. In meinem Fall musste ich nur: $args-\>setProcessed(true); eintragen und alles läuft perfekt. :slight_smile: