Ich muss die preDispatch-Methode eines Core-Controllers überschreiben. Der Core-Controller erbt von Mage_Checkout_Controller_Action
, der selbst über eine PreDispatch-Methode verfügt, die aufgerufen werden muss. Da ich von dem Core-Controller ausgehe, den ich überschreiben möchte, kann ich nicht einfach anrufen parent::preDispatch()
, da dies die Funktionalität beeinträchtigen würde, die ich vermeiden möchte.
Meine Frage ist: Wie kann ich eine überschriebene Methode aufrufen, die zwei Ebenen höher in der Vererbungskette liegt, oder gehe ich einfach falsch vor?
Aktualisieren
Anscheinend funktioniert das:
Mage_Checkout_Controller_Action::preDispatch();
(Obwohl diese Methode nicht statisch ist, lernst du jeden Tag etwas Neues.)
Meine Frage lautet nun: Gibt es eine bessere Möglichkeit, dies zu tun, ohne alle Funktionen aus der Klasse kopieren zu müssen, die ich überschreibe?
Der Grund, warum ich dies versuche, ist, dass ich diesen Weg eingeschlagen habe und versucht habe, Magento zu zwingen, sich an Adresszuweisungen zu erinnern, wenn Kunden die Multishipping-Kasse durchlaufen und anschließend gehen. (FWIW, ich fand den verlinkten Artikel großartig, um mich in die richtige Richtung zu bringen, aber es scheint viel zu fehlen, was die Schritte angeht, die unternommen werden müssen, damit dies funktioniert).
Der Controller, den ich überschreibe, ist der Core MultiShippingController, der eine Umleitung zurück zur Multishipping IndexAction hat, die vermieden werden muss. Nebenbei bemerkt, ich habe diese Funktionalität größtenteils vollständig erhalten, abgesehen von einigen Problemen (im Zusammenhang mit dem Hinzufügen des ersten Artikels zum Warenkorb und dem Mage_Sales_Model_Quote_Item-> getQuoteItem (), das in der Adresse address.phtml null zurückgibt das ist eine ganz andere Diskussion).
parent::someMethod()
es nicht statisch ist, sondern gibt einen Teil des Vererbungsbaums an, der durchlaufen werden soll, bevor eine Methode im richtigen$this
Kontext der Instanz der aktuellen Klasse aufgerufen wird.