View->assign() ohne Funktion nach Ajax-Request

Hallo,

ich habe in meinem kleinen Plugin einen Subscriber auf das Event „onFrontendDetailPreDispatch“ registriert. Dies funktioniert auch, d.h. ich kann über meine Funktion Daten an das View übergeben.

  

public function onFrontendDetailPreDispatch(\Enlight_Event_EventArgs $args)
{
  $controller = $args->getSubject();
  $controller->View()->assign('blubb', 'blubb');
}

 

 

Auf der Detailseite werden diese Daten korrekt angezeigt.

Wählt man auf der Detailseite eine andere Variante, wird diese per Ajax nachgeladen. Auch die onFrontendDetailPreDispatch-Methode wird hierbei aufgerufen. Dies habe ich über die Developer-Tools im Browser und die gelieferte Response mit Testausgaben geprüft. Allerdings funktioniert die Übergabe der Werte an das View NICHT mehr. 

Mein Template wird auch nach Abschluss des Ajax-Requests soweit korrekt gerendert, nur die Werte, die beim ersten Seitenaufruf korrekt übergeben werden, sind nun leer.

Hat jemand eine Idee, woran das liegen kann?

Das Template, das ich erweitere ist dieses:  frontend/detail/config_upprice.tpl

Vielen Dank!

Hallo,

 

vorsicht: Shopware holt beim Ajax Variantenwechsel eine komplett neue Seite. Also nicht einfach nur die benötigten Bereiche, sondern ein klomplette HTML Dokument. Das neue Dokument wird dann in dein vorhandenes mittels jQuery gemergt.

Also das heißt im Klartext: Deine Variable wird beim Variantenwechsel überschrieben, durch das, was bei der neuen Variante zurück kommt (weil ja die komplette Ansicht neu geladen wird).

 

Wenn du nur einmal die Variable brauchst, also wenn der User die Detailseite im Browser aufruft, dann könnte dir schon das preDispatchSecure Event helfen. Denn das wird nur ausgelöst, wenn eine vollständige HTTP Anfrage dahinter steht. Wird jetzt die Seite mittels Ajax aufgerufen, dann wird das Event gar nicht ausgelöst.

 

PS: onFrontendDetailPreDispatch ist kein Shopware Event. Das ist die Methode, auf die du das Shopware Event in deinem Plugin registriert hast.

 

MFG

 

derwunner

1 Like

Hi,

vielen Dank für deine Antwort.

Das Event wird ausgelöst, ich habe mir über die Ajax-Response ein paar Testausgaben (vor dem Rendern des Templates) erzeugt. Die Werte konnten nur eben nicht auf das View übergeben werden.

Lösung des Problems:

Ich habe mich nun auch auf das Event   Enlight_Controller_Action_ Post Dispatch_Frontend_Detail   “subscribed”. Dieses wird beim Ajax-Request logischerweise nach dem PreDispatch-Event ausgelöst. Bei der Methode, die ich hierbei (PostDispatch) ausführe, funktioniert die Übergabe an das View.

Ich werde mir die Unterschiede zwischen den Events noch einmal genauer anschauen.

Für das Frontend immer auf die Secure-Events registirieren. In deinem Fall also:

Enlight_Controller_Action_PostDispatchSecure_Frontend_Detail

1 Like

Das passiert wegen dem loadTemplate in der Controller Action. shopware/Detail.php at 5.4 · shopware/shopware · GitHub

bei einem loadTemplate wird die aktuelle View weggeworfen und eine neue erzeugt. Deshalb verschwindet deine Variable aus PreDispatch

1 Like