2010-08-30 9 views

risposta

3

dopo il debug innumerevoli e googling, ho capito risolto:

Per incrementale id indirizzo di ordine sulla base di ordine,

$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; 

Per l'indirizzo dell'ente id dell'ordine basato sul cliente,

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

In primo luogo, spezzare la chiamata incatenato per fare assicurarsi che si sta effettivamente caricare un ordine con

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

Supponendo che hai caricato l'ordine, guardare i valori di dumping sopra. Non c'è shipping_address_id. Questo, combinato con l'assenza di un metodo getShippingAddressId su un Mage_Sales_Model_Order è il motivo per cui il tuo codice non funziona.

Prova

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

Il metodo indirizzo getShippingAddress restituirà un oggetto indirizzo, che è possibile controllare per la sua identificazione. Se si guarda alla definizione di classe Mage_Sales_Model_Order, è possibile vedere il metodo definizioni

//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; 
} 

Il TL; DR per il codice di cui sopra è, gli ID di indirizzi non vengono memorizzati con il modello ordini. Gli indirizzi per tutti gli ordini vengono memorizzati come oggetto sales/order_address o Mage_Sales_Model_Order_Address.

+0

grande walkthrough Alan. Un paio di errori minori in là "valori * s * umped sopra" e "The * tl; dr * per il codice sopra" Cheers, JD –

+0

Non mi si può aspettare che digiti inglese corretto prima di mezzogiorno. (grazie) –

+0

certamente non prima della caffeina :) E a proposito, non mi rendevo conto che "tl; dr" era un'abbreviazione intenzionale - grazie a urbandictionary per quello! :) –

15

Quanto segue potrebbe aiutare qualcuno che cerca una soluzione simile:

// 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); 

} 

Nota: Ovviamente questa soluzione richiede all'utente di avere una sessione corrente

Buona fortuna.

+0

Grazie - ha funzionato per me. –

+0

Come mostrato di seguito, si può usare '$ address-> getData()' ed elaborare tramite un 'foreach ($ address-> getData() come $ key => $ value)'. Questa risposta è stata la soluzione più semplice per me. –

3

Prova questo, è possibile ottenere lo shipping_address_id e 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()); 
Problemi correlati