Answers:
一种方法是使用观察者和转换器。
观察者将获得从产品到报价的属性(使用名为“ 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调用字段集定义,该定义将处理从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/
100
而不是50
报价项目?如果属性值已更新,如何保存更新后的值,而不是从管理员那里保存一个值