Magento ショッピング カートを拡張して、店舗検索用の追加の手順を含める必要があります。コアの OnePage コントローラー ( Mage_Checkout_OnepageController
) とブロック ( Mage_Checkout_Block_Onepage
) を上書きする必要があることは理解していますが、追加情報 (カスタム ステップでユーザーが選択したオプションなど) を追跡するために必要なことは何ですか。
2 に答える
ここでは、ソリューション全体を取得するために必要な手順がいくつかあります。
まず、新しいモジュールを作成します。必要に応じてModuleCreatorを使用してください。
次に、モジュールにセットアップ スクリプトを記述して、新しいフィールドを 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));
関連するおよびテーブルMage_Sales_Model_Mysql4_Setup
にフィールドを追加するために を使用していることに注意してください。sales_flat_quote
sales_flat_order
次に、モジュールの 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>
これにより、Magento はカスタム フィールドの値を見積もりから注文、請求書、credit_memo などにコピーするように指示されます。
次に、カスタム ブロック/コントローラー コードで、Magento の魔法のゲッターとセッターを使用して値を永続化できます。
$oQuote = Mage::getSingleton('checkout/session')->getQuote();
$oQuote->setMyAttribute('some_value');
$oQuote->save();
に保存された新しい列と値が表示されsales_flat_quote
ます。次に、顧客がチェックアウトを完了すると、同じ値が に保存されsales_flat_order
ます。
上記のコードは、etc に変更するだけquote_item
で機能するように拡張できますが、製品に設定されている属性値を保存する場合は、追加の作業が必要になることに注意してください。order_item
quote
quote_item
XML の新しいブロックを config.xml に挿入します (再びグローバル ノード内)。
<sales>
<quote>
<item>
<product_attributes>
<my_attribute />
</product_attributes>
</item>
</quote>
</sales>
my_attribute
製品モデルの属性コードはどこにありますか。これにより、リンクされた製品で my_attribute が使用できるようになるため、次の方法でアクセスできます。
$oQuoteItem->getProduct()->getMyAttribute()
フルを実行する必要はありませんMage::getModel('catalog/product')->load($oQuoteItem->getProductId())
。これははるかに効率的です。
次に、値を product オブジェクトから quote_item オブジェクトにコピーするためのオブザーバーが必要になります。したがって、config.xml でオブザーバーを宣言します。
<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>
次のように、オブザーバー クラスにコードを記述します。
public function setCustomDataOnQuoteItem($oObserver){
$oProduct = $oObserver->getProduct();
$oQuoteItem = $oObserver->getQuoteItem();
foreach(array('my_attribute') as $vAttributeCode){
$oQuoteItem->setData($vAttributeCode,$oProduct->getData($vAttributeCode));
}
}
ここに完全な作業モジュールがあります.. (ほぼ) 上記の Johnatan のコードと同じです。ここにあります: https://bitbucket.org/vovsky/adding-custom-product-attribute-to-quote-and-order-items-in/
ここでのすべてのステップの完全な説明: http://www.atwix.com/magento/custom-product-attribute-quote-order-item/