2012-06-19 13 views
6

Magentoショッピングカートを拡張して、店舗ロケータの追加手順を含める必要があります。コアのOnePageコントローラ(Mage_Checkout_OnepageController)とブロック(Mage_Checkout_Block_Onepage)を上書きする必要があることを理解していますが、余分な情報(カスタムステップのユーザーの選択したオプションなど)の管理については何が必要ですか。Magentoショッピングカートを拡張する

答えて

15

ソリューション全体を取得するには、ここでいくつかの手順が必要です。

まず、新しいモジュールを作成します。必要に応じてModuleCreatorを使用してください。

次に、setup scriptをモジュールに書き込んで、Magentoの属性構造に新しいフィールドを追加します。 :

$setup = new Mage_Sales_Model_Mysql4_Setup('core_setup'); 
$setup->startSetup(); 

$setup->addAttribute('quote', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false)); 
$setup->addAttribute('order', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false)); 
$setup->addAttribute('invoice', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false)); 
$setup->addAttribute('creditmemo', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false)); 

は、関連sales_flat_quotesales_flat_orderテーブルにフィールドを追加するMage_Sales_Model_Mysql4_Setupの使用に注意してください。今

、あなたのモジュールのconfig.xmlファイルに次の値を挿入します。

<global> 

    <fieldsets> 
     <sales_convert_quote> 
      <my_attribute> 
       <to_order>*</to_order> 
      </my_attribute> 
     </sales_convert_quote> 
     <sales_convert_order> 
      <my_attribute> 
       <to_cm>*</to_cm> 
       <to_invoice>*</to_invoice> 
      </my_attribute> 
     </sales_convert_order> 
    </fieldsets> 

請求書とcredit_memoする注文する引用からカスタムフィールドの値をコピーするためにMagentoのを指示すること、など

カスタムブロック/コントローラコードでは、Magentoのマジックゲッターとセッターを使用して値を保持することができます。

$oQuote = Mage::getSingleton('checkout/session')->getQuote(); 
$oQuote->setMyAttribute('some_value'); 
$oQuote->save(); 

sales_flat_quoteに保存された新しい列と値が表示されます。その後、顧客が決済を完了したら、同じ値をsales_flat_orderに保存する必要があります。上記のコードは、あなたの製品に設定されている属性値を保存したい場合だけ、しかし、quote_itemなどにquoteを変更することにより、quote_itemorder_itemのために働くように拡張することができます

注、その後、いくつかの余分な作業が必要とされます。

(再びグローバルノード内)あなたのconfig.xmlにXMLの新しいブロックを挿入します。

my_attributeは、製品モデルの属性コードである
<sales> 
     <quote> 
      <item> 
       <product_attributes> 
        <my_attribute /> 
       </product_attributes> 
      </item> 
     </quote> 
    </sales> 

。これは、リンクされた製品にmy_attributeが利用できるようになりますので、あなたは完全なMage::getModel('catalog/product')->load($oQuoteItem->getProductId())を実行するために必要とせずに

$oQuoteItem->getProduct()->getMyAttribute() 

経由でアクセスすることができます。これははるかに効率的です。

次に、製品オブジェクトからquote_itemオブジェクトに値をコピーするには、オブザーバが必要です。

<events> 
     <sales_quote_item_set_product> 
      <observers> 
       <quoteitem_set_custom_data> 
        <type>singleton</type> 
        <class>mymodule/observer</class> 
        <method>setCustomDataOnQuoteItem</method> 
       </quoteitem_set_custom_data> 
      </observers> 
     </sales_quote_item_set_product> 
    <events> 

をし、このようなあなたのオブザーバークラスでコードを書く::だから、config.xmlであなたのオブザーバーを宣言ここで

public function setCustomDataOnQuoteItem($oObserver){ 
    $oProduct = $oObserver->getProduct(); 
    $oQuoteItem = $oObserver->getQuoteItem(); 
    foreach(array('my_attribute') as $vAttributeCode){ 
     $oQuoteItem->setData($vAttributeCode,$oProduct->getData($vAttributeCode)); 
    } 
} 
+0

は、なぜ誰も明らかなように、あなたが行ったように、完全なブログ記事を作成していないん?あなたの答えを探して2時間過ごしました!どうも ! – LittleBigDev

関連する問題