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

正しく機能している間、他の両方の回答には過剰なアドレスの読み込みがあります。の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 に答える
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 に答える