1

在购买结束时,用户可以更改您的送货地址。我正在尝试更新此信息,但它不起作用。这是我的代码:

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

我可以更新订单还是不允许?谁能给我小费?

4

3 回答 3

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

现在,它起作用了。感谢您的帮助@RS

于 2013-07-29T16:41:35.707 回答
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,因为您将加载一个新页面

于 2013-07-26T20:34:48.683 回答
2

在正常运行时,其他两个答案都有过多的地址加载。已经返回的getShippingAddress实例sales/order_address。所以程序可以简化为:

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

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

implodeStreetAddress仅当您使用多行街道地址时才需要方法调用。

于 2014-11-26T13:36:14.713 回答