Как получить идентификатор адреса доставки / выставления счета для заказа вне основного API Magento? - PullRequest
9 голосов
/ 30 августа 2010

Я хочу получить идентификатор адреса доставки / выставления счета только что завершенного заказа из Magento

Я пробовал следующий код, но он не работал:

Mage :: getModel ( 'продаж / заказ') -> нагрузка ($ array_data [ "order_id"]) -> getShippingAddressId ()

У кого-нибудь есть идеи?

Ответы [ 5 ]

15 голосов
/ 27 января 2011

Следующее может помочь кому-то, ищущему подобное решение:

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

}

Примечание. Очевидно, что для этого решения требуется, чтобы у пользователя был текущий сеанс

Удачи.

7 голосов
/ 30 августа 2010

Во-первых, разбейте ваш цепной вызов, чтобы убедиться, что вы действительно загружаете ордер с помощью

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

Предполагая, что вы загрузили ордер, посмотрите на значения, сброшенные выше.Там нет shipping_address_id.В сочетании с отсутствием метода getShippingAddressId на Mage_Sales_Model_Order ваш код не работает.

Попробуйте

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

Метод адреса getShippingAddress вернетадрес объекта, который вы можете проверить по его идентификатору.Если вы посмотрите на определение класса Mage_Sales_Model_Order, вы увидите определения методов

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

TL; DR для приведенного выше кода: идентификаторы адресов не сохраняются в модели заказов.Адреса для всех заказов хранятся как объект sales/order_address или Mage_Sales_Model_Order_Address.

4 голосов
/ 28 июня 2013
$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());
3 голосов
/ 31 июля 2012

Попробуйте, вы можете получить shipping_address_id и 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 голосов
/ 02 сентября 2010

После неисчислимых отладок и поисков в Google, я решил это:

Для идентификатора адреса добавочного заказа на основе заказа,

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

Для идентификатора объекта адреса заказа на основе клиента,

$quote = Mage::getSingleton('checkout/session')->getQuote();
$billing_address_id=$quote->getBillingAddress()->customer_address_id;
$shipping_address_id=$quote->getShippingAddress()->customer_address_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...