Magento - Redirect Kunden aus der Beobachter-Methode
In diesem Fall checkout_cart_add_product_complete
, ich möchte, dass der Kunde die Weiterleitung zu einer externen web-Seite http://www.example.com/
. Dafür bin ich mit diesem code, der funktioniert nicht:-
public function moduleMethod() {
/* @var $response1 Mage_Core_Controller_Response_Http */
$response1 = $observer->getEvent()->getResponse();
/* @var $response2 Mage_Core_Controller_Response_Http */
$response2 = Mage::app()->getResponse();
$url = 'http://www.example.com/';
$response1->setRedirect($url);
return;
}
Habe ich die " setRedirect()
" - Methode auf diese beiden Variablen "$response1
" und "$response2
", die aber beide zeigen mir die Seite mit dem Einkaufswagen, während ich sehen will dies Seite http://www.example.com/
statt.
Was ich will:
- Ich nicht überschreiben wollen die Controller-Klasse, die nur die Kunden umzuleiten, wenn ich kann effektiv nutzen die Event-Observer-Prozess.
- Ich nicht wollen, um die PHP-Funktion "
header()
", wenn Magento framework bietet diese Funktionalität in einer effizienten Art und Weise.
Du musst angemeldet sein, um einen Kommentar abzugeben.
tl;dr: Richtigen Beobachter-code an der Unterseite.
Ein Hinweis, bevor ich die Antwort: Stellen Sie sicher, dass der Beobachter ausgelöst wird; Schritt für Schritt durch den code, oder verwenden Sie
die('here');
. Wie geschrieben, dein Beispiel Methode nicht die richtige Prototyp zum empfangen von Ereignis-Beobachter-Daten (missing argument).Event-Beobachter für redirect Logik ist völlig angemessen, in diesem Kontext ist, wie ersichtlich, durch das Kern-team ausdrücklich die Weitergabe der Anfrage und Antwort Objekte auf den Betrachter. Dein Versuch ist gut, aber ich denke, dass Sie die Bedingungen und die Konfiguration, die Ausführung zu fließen, um
Mage_Checkout_CartController::_goBack()
, die speziell auf die ZeileAlso müssen wir überarbeiten unser Konzept. Jetzt könnte man verhindern, dass jeder request/response-Logik von der Verarbeitung nach der Veranstaltung Betrachter durch die Manipulation der Antwort und ruft der Front Controller ist
sendResponse()
Methode, wie unten gezeigt (nb: tun Sie das nicht!):Sollte dies funktionieren, aber ich denke, es vermischt Bereiche der Besorgnis ausgelöst, um die Ausgabe von einer ätherisch-system-Komponente (EDA). Mal sehen, ob es etwas in den command-control-Struktur, die wir verwenden können...
Nur nach der
checkout_cart_add_product_complete
Ereignis die Ausführung der Warenkorb-controller _goBack () - Methode. Das problem mit dieser Methode Namen ist, dass er nicht mehr als sein name sagt:Wie es aussieht können wir mit einem
return_url
param auf das request-Objekt und das zu erreichen, was wir brauchen.Habe ich getestet, und es sollte den trick tun!
dispatch()
- Methode). Dies verstößt gegen die Trennung von Bedenken, die hilft, um Magento (und anderen MVC-frameworks) ein bisschen weniger chaotisch. Aber, wenn es für Sie arbeitet und Sie eine überzeugende Fall zu diesem Ansatz, gehen Sie für es! (Ich weiß decken die von Ihnen vorgeschlagene Lösung in meiner Antwort, BTW.)Ich musste gehen durch
getFront
:$this
), um die Reaktion$this->getResponse()
und nicht die$observer
Objekt. Hoffe, es hilft.return_url
param auf die Anfrage) hat nicht funktioniert, für etwas, was ich Tat, und ich glaube, dass ist unintuitiv. Dieses Stück code ist, was ich glaube, dein code wurde ursprünglich versucht, zu tun.$observer->getResponse()
? Ich habe versucht, es in meinem Magento lokalen, und es ist für mich arbeiten, anstatt$observer->getEvent()->getFront()->getResponse()
. Hoffe, es hilft.Mage::app()->getResponse()
arbeiten "woanders".Können Sie die _redirectUrl() Methode , es wird benutzt für die Umleitung zu externen Webseiten von magento.