見積品目と注文品目の製品属性


25

Magentoで商品属性を自動的に永続化してアイテムを引用し、最後にアイテムを注文する正しい方法は何ですか?

それは小さな設定XMLと同じくらい簡単ですか、それともイベントなどを保存する前に見る手動プロセスですか?

回答:


21

1つの方法は、オブザーバーとコンバーターを使用することです。

オブザーバーは製品から見積までの属性を取得し(「テスト」という属性を使用)、コンバーターは見積から注文までの属性を取得します。

あなたの設定で:

<global>
    <fieldsets>
        <sales_convert_quote_item>
            <test>
                <to_order_item>*</to_order_item>
            </test>
        </sales_convert_quote_item>
    </fieldsets>

    <sales>
        <quote>
            <item>
                <product_attributes>
                    <test />
                </product_attributes>
            </item>
        </quote>
    </sales>

    <events>
        <sales_quote_item_set_product>
            <observers>
                <YOUR_MODULE>
                    <class>YOUR_MODULE/observer</class>
                    <method>setTestAttribute</method>
                </YOUR_MODULE>
            </observers>
        </sales_quote_item_set_product>
    </events>
</global>

あなたのオブザーバーで:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}

1
よくできました!!!。
-philwinkle

6
今後のGoogle社員への警告:これをテストする前に、手動でキャッシュフォルダーを削除してください。この答えについて多くのバリエーションをテストし、バックエンドを介してインデックスとキャッシュをクリアするのに何時間も費やしました。何をしても、カスタム属性はdbに保存されず、quote_itemのタイトルを変更してもうまくいきました。/ var / cacheを削除してキャッシュを手動でクリアするまで...クレイジー!
モーリス

受注詳細ページのskuの横にあるバックエンドパネルでもこの​​カスタム属性を使用します。どうやって達成するのですか?
インルサラブ

21

これは、オブザーバーとconfig.xmlの知識を組み合わせることにより行われます。Config.xmlは、見積品目のカスタム属性定義の提供を管理し、オブザーバーは、見積に追加されたときに製品属性を見積に保存することを処理します。

そこから、config.xmlを使用してfieldset定義を呼び出します。これにより、からquote_itemへの変換が処理されorder_itemます。

完全な開示:以下の内容はAtwixからのものです。答えの下のリンク。

最初に、sales->quote->item->product_attributesノードにカスタム属性を追加する必要があり ます。

<sales>
    <quote>
        <item>
            <product_attributes>
                <custom_attribute />
            </product_attributes>
        </item>
    </quote>
</sales>

これにより、製品から見積品目に属性をコピーするときに属性にアクセスできるようになります。これが次のステップです。このタスクでは、オブザーバーが使用され、イベントが呼び出され sales_quote_item_set_productます:

<sales_quote_item_set_product>
    <observers>
        <yourmodule_customattribute>
            <class>yourmodule_customattribute/observer</class>
            <method>salesQuoteItemSetCustomAttribute</method>
        </yourmodule_customattribute>
    </observers>
</sales_quote_item_set_product>

観察者:

public function salesQuoteItemSetCustomAttribute($observer)
{
    $quoteItem = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $quoteItem->setCustomAttribute($product->getCustomAttribute());
}

最後に気にする必要があるのは属性をからquote_item変換することですorder_item。そして、これはXMLで実行できます。

<fieldsets>
    <sales_convert_quote_item>
        <custom_attribute>
            <to_order_item>*</to_order_item>
        </custom_attribute>
    </sales_convert_quote_item>
    <sales_convert_order_item>
        <custom_attribute>
            <to_quote_item>*</to_quote_item>
        </custom_attribute>
    </sales_convert_order_item>
</fieldsets>

出典:Atwix(誰もが勝ちです):http ://www.atwix.com/magento/custom-product-attribute-quote-order-item/


2
+1。自分を+1したような気がします。似たような内容を送信しようとすると、「この質問には新しい答えがあります」というメッセージが表示されました。あなたが速く入力するので+1 :)
マリウス

ハハハ-それは本当にAtwixです。
-philwinkle

@philwinkle、上記はうまく機能しますが、カスタム属性は数量に応じた製品ポイントであると仮定します。製品Aに50ポイントと2数量がある場合、合計ポイントは50 * 2 = 100になります。見積品目10050はなく値を設定するにはどうすればよいですか?属性値が更新された場合、管理者から設定された値ではなく、更新された値を保存するにはどうすればよいですか
-Slimshadddyyy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.