it-swarm.com.de

Wie erhalte ich die Versandart, die der Benutzer während des Bezahlvorgangs gewählt hat?

Ich möchte den Namen der Versandart erhalten, die der Benutzer während des Bezahlvorgangs gewählt hat. Kann jemand diese Informationen abrufen?

Dies wird es bis zu einem gewissen Grad erhalten, es wird jedoch zwischengespeichert: 

Mage :: getSingleton ('checkout/session') -> getQuote () -> getShippingAddress () -> getShippingDescription (); 

Wenn ich mich in der Onestep-Kasse befinde und zum Versandstab zurückkehre und den Versand wechsle, wird immer noch die alte Versandmethode beibehalten. Ich muss herausfinden, wie ich das aktuelle bekomme.

15
Chris

Vorwort

Konstruiert aus Magento app/code/core/Mage/Checkout/Block/Onepage/Shipping/Method/Available.php und anderen:

app/design/frontend/base/default/template/checkout/onepage/shipping_method/available.phtml verwendet diesen Code, um zu bestimmen, welche Versandart ausgewählt wurde:

$this->getAddressShippingMethod()

app/code/core/Mage/Checkout/Block/Onepage/Shipping/Method/Available.php erweitert diesen Code um Folgendes:

return $this->getAddress()->getShippingMethod();

Lassen Sie uns ein wenig recherchieren und noch tiefer ausbauen:

$this->getQuote()->getShippingAddress()->getShippingMethod();

Übergeordneter Block erweitert die Methode getQuote () :

return $this->getCheckout()->getQuote();

Und tiefer:

public function getChechout() {
    return Mage::getSingleton('checkout/session');
}

Das Zusammenführen all dieses Codes ergibt folgendes:

Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingMethod()

Damit erhalten Sie den Versandartcode. Wenn Sie das geben, können Sie es nach Belieben manipulieren. Diese Daten werden in der Datenbank gespeichert. Wenn Sie die Versandart ändern, ändert sich auch der Code.


Immer tiefer und tiefer!

Wenn Sie jemals eine eigene Versandmethode erstellt haben, wissen Sie, dass sie die Methode collectRates () hat. 

Er füllt einen Satz von shipping/rate_result_method models, speichert ihn in der Instanz von shipping/rate_result model und gibt ihn zurück (Sie können jede Instanz des Modells mit Mage :: getModel (<model i Habe>);) genannt.

Hinweis: one könnte mehrere rate_result_method -Instanzen enthalten, während der Code für die Versandmethode für alle diese Instanzen derselbe ist!

Um die Beschreibung zu erhalten, müssen Sie daher eine der rate_result_method -Instanzen abrufen und deren methodTitle oder carrierTitle abrufen.

Nach einer kleinen Recherche habe ich herausgefunden, wie man all diese Preise abruft:

Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingRatesCollection()

Dadurch erhalten Sie eine Sammlung aller Tarife für die ausgewählte Versandart. Sie können es mit getItems () betreiben und einen Hash abrufen. Oder Sie könnten getFirstItem () verwenden und es als Vorlage verwenden. 

Nehmen wir an, Sie haben einige Elemente dieser Sammlung abgerufen und in der Variablen $ rate gespeichert:

$rate->getCarrier(); // This will provide you with the carrier code
$rate->getCarrierTitle(); // This will give you the carrier title
$rate->getCode(); // This will give you **current shipping method** code
$rate->getMethod(); // This will provide you with the **shipping method** code
$rate->getMethodTitle(); // This will tell you current shipping method title
$rate->getMethodDescription(); // And this is the description of the current shipping method and **it could be NULL**

Das war's Leute!

Es tut mir wirklich leid für mein schlechtes Englisch und für meinen merkwürdigen Gedankengang. Hoffe, das hilft dir oder jemand anderem. Vielen Dank!

74
shybovycha

Nur für den Fall, dass Sie es noch brauchen. Sie können Versandart von der Bestellung erhalten durch:

$order->getShippingMethod();

Wie Sie Ihre $ Order erhalten, hängt natürlich vom Kontext ab ..__ Sie können auch eine Beschreibung erhalten durch:

$order->getShippingDescription();
5
Taras
shipping method in magento

$methods = Mage::getSingleton('shipping/config')->getActiveCarriers();
$options = array();
foreach($methods as $_code => $_method)
{
    if(!$_title = Mage::getStoreConfig("carriers/$_code/title"))
        $_title = $_code;

    $options[] = array('value' => $_code, 'label' => $_title . " ($_code)");
}
echo "<xmp>";
print_r($options);
echo "</xmp>";
1
Rahul Shinde

In Ihrem Checkout-Controller müssen Sie zusätzliche Schritte hinzufügen, um Ihr Angebot zu speichern, wenn Sie möchten, dass diese Informationen für Sie verfügbar sind.
Ich habe ein paar '$ quote-> save ();' Einträge, damit dies funktioniert, ich kann jedoch nicht definitiv sagen, welcher Eintrag derjenige ist, der die Korrektur vorgenommen hat. Ich kann den Link auch nicht in Magento-Foren finden. Ich hoffe jedoch, dass ich Ihnen einen Überblick darüber geben kann, was los ist.

0
ʍǝɥʇɐɯ

Sie können die saveShippingMethodAction()-Funktion im Mage_Checkout_OnepageController überschreiben oder erweitern und die Methode in der Registrierung speichern, indem Sie Folgendes einfügen:

Mage::register('blahShippingMethod', $this->getRequest()->getPost('shipping_method'));  

und rufen Sie es an, wenn Sie es brauchen: Mage::registry('blahShippingMethod');

Vergessen Sie nicht, die Einstellung rückgängig zu machen, wenn Sie sie nicht mehr benötigen. Wenn Sie versuchen, das Gerät zurückzusetzen, wird ein Fehler angezeigt, wenn es bereits eingestellt wurde.

Mage::unregister('blahShippingMethod');
0
Iain Ballantyne