製品ページに (外部 API に基づいて) 料金を表示するカスタム Magento モジュールを作成しています。製品ページで応答を取得した後、応答からの情報の一部を製品ビューのフォームに追加します。
目標は、アドレスを保存することです (その他にもいくつかありますが、それらは今のところセッションにある可能性があります)。チェックアウト (onestepcheckout、無料版) が自動的にこれらの値 (都市、州、郵便番号、国、配送方法 [そのうち 3 つ]) を入力し、料金の見積もりを読み込むように、住所を見積もりに保存する必要があります。 ajax経由(すでに行っています)。
これについては、オブザーバーを使用して、カート イベントを監視しています。アドレスを入力して保存します。カート ページまたはチェックアウト ページで最大 4/5 回データが失われると、SQL テーブルは、明示的な保存があるにもかかわらず、quote_address がアドレス情報なしで保存されていることを示しています。
私が使用したオブザーバーメソッドは次のとおりです。
checkout_cart_update_item_complete
checkout_cart_product_add_after
コードの節約は次のとおりです。
// $params = Mage::app()->getRequest()->getParams()
// $quote = Mage::getSingleton('checkout/cart')->getQuote()
// or
// $quote = observer->getProduct()->getQuoteItem()->getQuote();
// where applicable, but both methods seemed to === each other
$quote->getShippingAddress()
->setCountryId($params['estimate_to_country'])
->setCity($params['estimate_to_city'])
->setPostcode($params['estimate_to_zip_code'])
->setRegionId($params['estimate_to_state_code'])
->setRegion($params['estimate_to_state'])
->setCollectShippingRates(true)
->setShippingMethod($params['carrier_method'])
->setQuote($quote)
->save();
$quote->getBillingAddress()
->setCountryId($params['estimate_to_country'])
->setCity($params['estimate_to_city'])
->setPostcode($params['estimate_to_zip_code'])
->setRegionId($params['estimate_to_state_code'])
->setRegion($params['estimate_to_state'])
->setCollectShippingRates(true)
->setShippingMethod($params['carrier_method'])
->setQuote($quote)
->save();
$quote->save();
$cart->save();
// I also tried:
Mage::getSingleton('checkout/session')->setQuote($quote);
これがこの情報を保存するのに最適な場所ではない可能性が高いと思いますが、よくわかりません. カートに追加アクションでアドレスを保存するためにコントローラー全体をオーバーライドせずにこれを行うのに適した場所があるかどうか疑問に思っていました。
どうもありがとう、明確にする必要がある場合はお知らせください