报价项目和订单项目的产品属性


25

在Magento中,具有商品属性自动持久保留以报价物品然后最终订购商品的正确方法是什么?

它像配置XML一样简单,还是在保存事件等之前进行手动处理?

Answers:


21

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

观察者将获得从产品到报价的属性(使用名为“ 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;
}

1
做得很好!!!。
philwinkle

6
对未来的Google员工的警告:请在测试前手动删除缓存文件夹。我花了很多时间测试这个答案的许多变化,通过后端清除索引和缓存。无论我做什么,自定义属性都不会保存到db,更改quote_item的标题却可以正常工作。直到我通过删除/ var / cache 手动清除了缓存...疯狂!
2014年

我要在后端面板中的此自定义属性以及销售订单详细信息页面中sku旁边。请提示,如何达到目的?
inrsaurabh

21

这是通过结合您对观察者的知识和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_itemorder_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。如何设置值100而不是50报价项目?如果属性值已更新,如何保存更新后的值,而不是从管理员那里保存一个值
Slimshadddyyy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.