1

製品ページに (外部 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);

これがこの情報を保存するのに最適な場所ではない可能性が高いと思いますが、よくわかりません. カートに追加アクションでアドレスを保存するためにコントローラー全体をオーバーライドせずにこれを行うのに適した場所があるかどうか疑問に思っていました。

どうもありがとう、明確にする必要がある場合はお知らせください

4

1 に答える 1

0

Magento では、必要な場所に独自のイベントを作成できますが、この場合、checkout_cart_product_add_afterイベントを使用してクオーレ アドレスの詳細を更新できます。

したがって、ここに同じコードがあります

$quote = Mage::getSingleton('checkout/session')->getQuote();

$billingAddress = Mage::getModel('sales/quote_address')
        ->setStoreId($storeId)
        ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
        ->setCustomerId(('Your_Value_Here'))
        ->setCustomerAddressIpd(('Your_Value_Here'))
        ->setCustomer_address_id(('Your_Value_Here'))
        ->setPrefix(('Your_Value_Here'))
        ->setFirstname(('Your_Value_Here'))
        ->setMiddlename(('Your_Value_Here'))
        ->setLastname(('Your_Value_Here'))
        ->setSuffix(('Your_Value_Here'))
        ->setCompany(('Your_Value_Here'))
        ->setStreet(('Your_Value_Here'))
        ->setCity(('Your_Value_Here'))
        ->setCountry_id(('Your_Value_Here'))
        ->setRegion(('Your_Value_Here'))
        ->setRegion_id(('Your_Value_Here'))
        ->setPostcode(('Your_Value_Here'))
        ->setTelephone(('Your_Value_Here'))
        ->setFax(('Your_Value_Here'));
$quote->setBillingAddress($billingAddress);

$shippingAddress = Mage::getModel('sales/quote_address')
        ->setStoreId($storeId)
        ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
        ->setCustomerId(('Your_Value_Here'))
        ->setCustomerAddressId(('Your_Value_Here'))
        ->setCustomer_address_id(('Your_Value_Here'))
        ->setPrefix(('Your_Value_Here'))
        ->setFirstname(('Your_Value_Here'))
        ->setMiddlename(('Your_Value_Here'))
        ->setLastname(('Your_Value_Here'))
        ->setSuffix(('Your_Value_Here'))
        ->setCompany(('Your_Value_Here'))
        ->setStreet(('Your_Value_Here'))
        ->setCity(('Your_Value_Here'))
        ->setCountry_id(('Your_Value_Here'))
        ->setRegion(('Your_Value_Here'))
        ->setRegion_id(('Your_Value_Here'))
        ->setPostcode(('Your_Value_Here'))
        ->setTelephone(('Your_Value_Here'))
        ->setFax(('Your_Value_Here'));

$quote->setShippingAddress($shippingAddress)
        ->setShipping_method('flatrate_flatrate')
        ->setShippingDescription($this->getCarrierName('flatrate'));


$quote->save();
于 2012-12-20T20:59:37.717 に答える