2013-07-26 181 views
1

在购买结束时,用户可以更改您的送货地址。我试图更新这些信息,但它并不奏效。这是我的代码:Magento更新订单送货地址

$customer = Mage::getModel('customer/session')->getCustomer(); 
$order = Mage::getSingleton('checkout/session')->getLastOrder(); 
$postData = Mage::app()->getRequest()->getPost(); 

$_new_address = array (
    'firstname' => $postData['nombre'], 
    'lastname' => $postData['apellidos'], 
    'street' => array ('0' => $postData['direccion']), 
    'city'  => $postData['localidad'], 
    'region_id' => $postData['provincia_id'], 
    'region' => '', 
    'postcode' => $postData['codigo_postal'], 
    'country_id'=> 'ES', 
    'telephone' => $postData['telefono'] 
); 

$customAddress = Mage::getModel('customer/address'); 
$customAddress->setData($_new_address) 
    ->setCustomerId($customer->getId()) 
    ->setIsDefaultBilling('1') 
    ->setIsDefaultShipping('1') 
    ->setSaveInAddressBook('1'); 

// Save address 
try { 
    $customAddress->save(); 
} catch (Exception $e) { 
    Mage::getSingleton('core/session')->addError($e->getMessage()); 
    header('Location: /'); 
    exit; 
} 

// Update the order 
try { 
    $order->setShippingAddress($customAddress)->save(); 
} catch (Exception $e) { 
    Mage::getSingleton('core/session')->addError($e->getMessage()); 
    header('Location: /'); 
    exit; 
} 

我可以更新订单或不允许吗?任何人都可以给我一个小费?

回答

3

我的问题是,订单中的帐单地址和送货地址与用户不同具有作为默认地址。

在结束时,代码如下所示:

$order = Mage::getSingleton('checkout/session')->getLastOrder(); 

$postData = Mage::app()->getRequest()->getPost(); 

// Try to get shipping and billing address data. 
$orderShippingAddress = $order->getShippingAddress()->getId(); 
$orderShipping = Mage::getModel('sales/order_address')->load($orderShippingAddress); 

$orderBillingAddress = $order->getBillingAddress()->getId(); 
$orderBilling = Mage::getModel('sales/order_address')->load($orderBillingAddress); 

// Updating data. 
$orderShipping->addData($postData); 
$orderBilling->addData($postData); 

try { 
    $orderShipping->implodeStreetAddress()->save(); 
    $orderBilling->implodeStreetAddress()->save(); 
} catch (Exception $e) { 
    Mage::logException($e); 
    Mage::getSingleton('core/session')->addError($e->getMessage()); 
    header('Location: /after/success/envio'); 
    exit; 
} 

现在,它的工作原理。感谢您的帮助@ R.S

2

假设你要更新的送货地址的订单,看看@addressSaveAction()在/app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php

$order = Mage::getSingleton('checkout/session')->getLastOrder(); 

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

$address = Mage::getModel('sales/order_address')->load($addressId); 

$data  = $this->getRequest()->getPost(); 

$address->addData($data); 

$address->implodeStreetAddress()->save(); 

此外,我我不确定Mage::getSingleton('checkout/session')->getLastOrder()在您提交表单后是否仍然包含有效的订单ID,因为您将加载新页面

+0

是的,getLastOrder()仍然包含有效的订单ID。 – Javier

2

虽然正常运行,但其他答案都有过多的地址加载。 getShippingAddress已经返回sales/order_address的实例。因此,该过程可以简化为以下几点:如果您使用多行的街道地址

$order = Mage::getSingleton('checkout/session')->getLastOrder(); 
$data = $this->getRequest()->getPost(); 

$order->getShippingAddress()->addData($data) 
    ->save(); 

而且implodeStreetAddress方法调用时才需要。

相关问题