当前位置: 首页>>技术问答>>正文


产品属性引用项目和订单项目

webfans 技术问答 , , , 去评论

问题描述

magento有一个产品属性的正确方法是自动持续引用项目,然后最终订购项目?

它是一样简单的一个小配置XML或者它是一个手动过程之前保存事件等等?

最佳解决方法

一种方法是使用观察者和转换器。

观察者将从产品中获取属性(使用名为’test’的属性),并且转换器从报价中获取订单的属性。

在你的配置中:

<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;
}

次佳解决方法

这是通过结合你的观察者和config.xml的知识来完成的。 Config.xml将管理报价项目上的自定义属性定义的提供,并且观察者将添加到报价时将产品属性保存为报价。

从那里,你使用config.xml调用fieldset定义,该定义将处理从quote_itemorder_item的转换。

充分披露:以下内容来自Atwix。链接下面的答案。

At first, you should add custom attribute to sales->quote->item->product_attributes node:

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

This makes attribute accessible when we will be copying it from the product to quote item – which is our next step. For this task the observer is used, and the event will be called 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> 

Observer:

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

The last thing we need to care about – it is converting attribute from quote_item to order_item. And this can be done with 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/

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2009.html,转载请务必附带本地址声明。