2010-08-30 5 views

Antwort

3

Nach unzähligen Debuggen und googeln habe ich es gelöst:

Für inkrementelle Adresse id Bestellung auf Bestellung basiert,

$order_id=Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
$sales_order=Mage::getModel('sales/order')->load($order_id); 
$billing_address_id=$sales_order->billing_address_id; 
$shipping_address_id=$sales_order->shipping_address_id; 

Für Adressenentität ID der Bestellung auf Kunden basiert,

$quote = Mage::getSingleton('checkout/session')->getQuote(); 
$billing_address_id=$quote->getBillingAddress()->customer_address_id; 
$shipping_address_id=$quote->getShippingAddress()->customer_address_id; 
7

Zuerst brechen auseinander Ihren gekettet Anruf, um sicherzustellen, machen Sie Laden tatsächlich einen Auftrag mit

$order = Mage::getModel('sales/order')->load($array_data["order_id"]); 
var_dump($order->getData()); 

Angenommen, Sie die Reihenfolge geladen haben, bei den oben abgeladen Werten suchen. Es gibt keine shipping_address_id. Das, zusammen mit gibt es keine Methode getShippingAddressId auf einem Mage_Sales_Model_Order ist, warum Ihr Code nicht funktioniert.

Versuchen

$order = Mage::getModel('sales/order')->load($array_data["order_id"]); 
$id = $order->getShippingAddress()->getId(); 

Die getShippingAddress Adresse Methode wird eine Adresse Objekt zurückgeben, die Sie für die ID überprüfen können. Wenn Sie bei der Definition Mage_Sales_Model_Order Klasse aussehen, können Sie die Methode sehen

//magento 1.4 
public function getShippingAddress() 
{ 
    foreach ($this->getAddressesCollection() as $address) { 
     if ($address->getAddressType()=='shipping' && !$address->isDeleted()) { 
      return $address; 
     } 
    } 
    return false; 
} 

public function getAddressesCollection() 
{ 
    if (is_null($this->_addresses)) { 
     $this->_addresses = Mage::getResourceModel('sales/order_address_collection') 
      ->addAttributeToSelect('*') 
      ->setOrderFilter($this->getId()); 

     if ($this->getId()) { 
      foreach ($this->_addresses as $address) { 
       $address->setOrder($this); 
      } 
     } 
    } 

    return $this->_addresses; 
} 

Die TL-Definitionen; DR für den Code oben, stellen Sie Adresse IDs nicht mit dem Auftrag Modell gespeichert. Die Adressen für alle Aufträge werden als Objekt sales/order_address oder Mage_Sales_Model_Order_Address gespeichert.

+0

großen Durchlauf Alan. Ein paar kleinere Tippfehler drin "Werte * s * umped oben" und "Die * tl; dr * für den obigen Code" Prost, JD –

+0

Ich kann nicht erwartet werden, richtig Englisch vor Mittag zu schreiben. (Danke) –

+0

sicherlich nicht vor Koffein :) Und BTW, ich habe nicht realisiert, dass "tl; dr" eine absichtliche Abkürzung war - Danke an urbandictionary dafür! :) –

15

Folgendes könnte jemandem helfen, der nach einer ähnlichen Lösung sucht:

// Get the id of the last order for the current user(session) 
$orderId = Mage::getSingleton('checkout/session')->getLastOrderId();   

// If an order actually exists 
if ($orderId) { 

    //Get the order details based on the order id ($orderId) 
    $order = Mage::getModel('sales/order')->load($orderId); 

    // Get the id of the orders shipping address 
    $shippingId = $order->getShippingAddress()->getId(); 

    // Get shipping address data using the id 
    $address = Mage::getModel('sales/order_address')->load($shippingId); 

    // Display the shipping address data array on screen 
    var_dump($address); 

} 

Hinweis: Offensichtlich erfordert diese Lösung die Benutzer eine aktuelle Sitzung

Viel Glück zu haben.

+0

Danke - das hat bei mir funktioniert. –

+0

Wie unten gezeigt, kann man '$ address-> getData()' verwenden und über 'foreach ($ address-> getData() als $ key => $ value)' verarbeiten. Diese Antwort war die einfachste Lösung für mich. –

3

Das Versuchen, können Sie die shipping_address_id bekommen und billing_address_id

$orderCollection = Mage::getResourceModel('sales/order_collection') 
->addAttributeToSelect('*') 
->addAttributeToFilter('main_table.customer_id',$session->getId()); 
echo "<pre>"; 
foreach ($orderCollection as $order){ 
$shippingAddress = Mage::getModel('sales/order_address')->load($order->getShippingAddressId()); 
$billingAddress = Mage::getModel('sales/order_address')->load($order->getBillingAddressId()); 
print_r($order->getData()); 
print_r($shippingAddress->getData()); 
print_r($billingAddress->getData()); 
} 
3
$order = Mage::getModel('sales/order')->load($orderId); 

//Get shipping address Id 
$order->getShippingAddress()->getId(); 

//format output 
echo $order->getShippingAddress()->format('html'); 

//Get shipping address data 
print_r($order->getShippingAddress()->getData()); 
Verwandte Themen