Я хочу получить идентификатор адреса доставки / биллинга из только что выполненного заказа Magento.
Я пробовал следующий код, но он не работал:
Mage :: getModel ( 'продаж / заказ') -> нагрузки ($ array_data [ "order_id"]) -> getShippingAddressId ()
- Обновление цены автоматически при изменении количества на странице продукта Magento
- Magento: генерация URL-адреса для бэкэнд-действия (с ключом)
- Magento: Fatal error: Class 'Mage_Giftcards_Helper_Data' не найден в ... / app / Mage.php в строке 546
- после установки magento на моей локальной машине я забыл пароль администратора
- Внутренняя доставка Magento DHL не работает
- Наблюдатель от Magento не работает на некоторых машинах
Есть ли у кого-нибудь идеи?
Следующие могут помочь кому-то искать аналогичное решение:
// 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); }
Примечание. Очевидно, что это решение требует, чтобы пользователь имел текущий сеанс
Удачи.
Во-первых, разбейте свой прикованный вызов, чтобы убедиться, что вы действительно загружаете заказ с помощью
$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
адреса 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
.
После бесчисленных отладочных и поисковых запросов я решил:
Для инкрементного идентификатора адреса адреса, основанного на заказе,
$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;
Попробуйте это, вы можете получить 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()); }
$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());