0

顧客が1ページのチェックアウトページにアクセスするたびに、見積もりの​​請求先住所をリセットする必要があります。

そこで、OnepageControllerのindexAction()メソッドを拡張し、次の行を追加して、新しい見積もりアドレスオブジェクトを作成し、それを見積もりオブジェクトに割り当てました。しかし、コードをデバッグすると、見積もりから取得したアドレスがまだ古いアドレスであることがわかります。

...
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();
...
4

2 に答える 2

0

通常、私の経験から、Javaの世界ではvoidメソッドであるセッターを実行することはできません(Javaは比較のために言及されています、私はphpの土地でurを知っています)、そしてそれに対して保存を実行します。あなたはオブジェクトを制定しているのではなく、関数を制定しているからです。

セッターを分離して保存してみましたか?

$quote = $this->getOnepage()->getQuote();
$quote->setBillingAddress($newBillingAddress);
$quote->save();
于 2012-03-08T13:58:33.313 に答える
0

わかりました。この問題を解決し、期待どおりに機能しない理由を見つけました。

その理由は、アドレスを設定するためのメソッドがQuoteクラスにどのように実装されているかです。古いアドレスオブジェクトが新しいオブジェクトに置き換えられるのではなく、新しいアドレスの_data配列の要素が古いアドレスの_data配列にコピーされます。

_data配列が空で、古いアドレスの_data配列にコピーするアイテムがない新しいアドレスオブジェクトを作成したので、アドレスオブジェクトはまだ古いものであるため、常に古いデータが返されます。

于 2012-03-08T14:42:24.767 に答える