Как сбросить платежный адрес объекта цитаты? - PullRequest
0 голосов
/ 08 марта 2012

Мне нужно сбрасывать адрес выставления счета, когда клиент заходит на страницу оформления заказа на одной странице.

Поэтому я расширил метод indexAction () OnepageController и добавил следующие строки, чтобы создать новый объект адреса цитаты и назначить его объекту цитаты.Но отладка кода показывает мне, что адрес, который я получаю из цитаты, все еще старый.

...
Mage::getSingleton('checkout/session')->setCartWasUpdated(false);
Mage::getSingleton('customer/session')->setBeforeAuthUrl(Mage::getUrl('*/*/*', array('_secure'=>true)));

$this->getOnepage()->initCheckout();

// --- Start of my code ------------------------------

// Create a new quote address object and pass it to the quote 
$newBillingAddress = Mage::getModel('sales/quote_address');     
$this->getOnepage()->getQuote()->setBillingAddress($newBillingAddress)->save();

// get address from quote to see whether is changed or not. 
// but it is still the old address.     
$billingAddress = $this->getOnepage()->getQuote()->getBillingAddress();

// --- End of my code ------------------------------

$this->loadLayout();
...

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

Хорошо, я решил эту проблему и выяснил, почему она не работает должным образом.

Причина в том, как метод установки адреса реализован в классе Quote.Не старый объект адреса заменяется новым, а элементы массива _data нового адреса копируются в массив _data старого адреса.

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

0 голосов
/ 08 марта 2012

обычно из моего опыта вы не можете выполнить установщик, который является в Java-мире пустым методом (Java упоминается для сравнения, я знаю, что вы в php-стране), и выполнить сохранение на нем. Потому что вы действуете не на объекте, а на функции.

Вы пытались отделить сеттер, а затем сохранить?

$quote = $this->getOnepage()->getQuote();
$quote->setBillingAddress($newBillingAddress);
$quote->save();
...