6

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

4

2 に答える 2

15

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

まず、新しいモジュールを作成します。必要に応じて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_quotesales_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_itemquotequote_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));
    }
}
于 2012-06-19T00:57:19.823 に答える
0

ここに完全な作業モジュールがあります.. (ほぼ) 上記の 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/

于 2013-10-03T12:38:20.490 に答える