Bitte beachten Sie, diese Frage bezieht sich auf die Versandkosten, nicht den Preis. Es gibt einen wichtigen Unterschied, d. H. Welche $$ die Versandmethode für den Ladenbesitzer verursacht, im Gegensatz zu dem, was $$ vom Kunden bezahlt wird.Zugriff auf die Versandkosten in Magentos Warenkorb und/oder Kasse
shipping_tablerate
Die Datenbanktabelle enthält ein cost
Feld, das in dem Objekt während des Mage_Shipping_Model_Carrier_Tablerate
collectRates
Verfahrens aufgefüllt wird. Dieses Feld ist jedoch nirgendwo anders im Stapel zugänglich, z. aus der Adresse eines Zitats.
Ich muss auf den Wert auf der Warenkorbseite zugreifen, und ich kann nicht finden, um es zu erreichen, außer ein Mage_Shipping_Model_Rate_Request
Objekt in collectRates()
zu instanziieren. Dies erscheint unnötig ineffizient, da die Daten bereits aus der Tabelle geladen sind und zugänglich sein sollten.
Ich habe versucht, das <shipping_carrier_tablerate_load/>
Ereignis zu beobachten, aber es scheint, dass das _load
Ereignis für dieses Modell nicht ausgelöst wird.
Ich habe auch versucht, die Rate von dem Zitat Zugriff:
$quote = Mage::getSingleton('checkout/cart')->getQuote();
$address = $quote->getShippingAddress();
$rate = $address->getShippingRateByCode($code ='tablerate_bestway');
ich die price
berechnet sehen kann, jedoch cost
in diesem Modell nicht vorhanden ist.
In diesem Stadium sind mir die Ideen ausgegangen. Irgendwelche Vorschläge dankbar erhalten!
Danke, Jonathan
Danke Alan, gute Antwort.Ich hatte Bedenken, zur Datenbank zurückzukehren, weil dieses Modell den Standard-Autoload-Prozess nicht zu durchlaufen scheint, weshalb das Ereignis "$ model_load" nicht ausgelöst wird. Ich mag die Idee, den 'Mage :: register' zu verwenden, um den Wert zu speichern. Wird 'Mage :: register' global gespeichert oder nur für diese 'checkout/session'? Wenn es global ist, muss ich überprüfen, ob die Rate, die gespeichert wird, das 'dest_zip' enthält, das verwendet wird, um es zu berechnen. Aber das ist ein Implementierungsdetail. –
P.S. Das Laden der Datenbank für 'table rate' wird in 'Mage_Shipping_Model_Mysql4_Carrier_Table- rate_Collection :: __ construct()' durchgeführt und ist ziemlich komplex, da es drei Tabellen im Join involviert. –
Ah, ich habe die Frage falsch verstanden. Ich dachte, du wolltest es während derselben Anfrage nutzen. Ich bin mir ziemlich sicher, dass Mage :: register eine pro-Anfrage-Sache ist ... globale Variablen, ohne den globalen Geltungsbereich zu verletzen. Auch, FWIW, ich habe gerade meine lokale 1.4 und 1.4.1 Codebasis durchsucht und das shipping_carrier_tablerate_load Event nirgendwo gefunden. –