Magento:将自己的quote-item-field命名为order-item

时间:2012-07-13 07:25:36

标签: magento quote sales

我想在order_item-table中保存自定义信息。这些信息在购物车中创建。所以我这样做就像这篇文章中描述的那样:Extending Magento Shopping Cart

我安装了属性

$installer->addAttribute('quote_item', 'final_delivery_time', $settings);

$installer->addAttribute('order_item', 'final_delivery_time', $settings);

在config.xml中声明字段集

<fieldset>
        <sales_convert_quote_item>
            <final_delivery_time>
                <to_order_item>final_delivery_time</to_order_item>
            </final_delivery_time>
        </sales_convert_quote_item>

        <sales_convert_order_item>
            <final_delivery_time>
                <to_quote_item>*</to_quote_item>
                <to_invoice_item>*</to_invoice_item>
                <to_shipment_item>*</to_shipment_item>
                <to_cm_item>*</to_cm_item>
            </final_delivery_time>
        </sales_convert_order_item>
</fieldset>

以及购物车中的一些代码

$oQuote = Mage::getSingleton('checkout/session')->getQuote();
    foreach ( $oQuote->getAllItems() as $_item )
    {
        $orderItemId = $_item->getId();
        $_item->setFinalDeliveryTime('some Value');
        $_item->save();
    }

所以我得到了一个引用,我在sales_flat_quote_item表中使用了这个值我的字段final_delivery_time

我将订单放在onepage-review之后,我也应该在sales_flat_order_item表中有这个字段,但什么都没有。在列中'null'。 所以我需要按顺序保存的字段值

1 个答案:

答案 0 :(得分:5)

我找到了解决方案

它是一个观察者 我添加以下代码

config.xml中

...  
<events>
        <sales_convert_quote_item_to_order_item>
            <observers>
                <quoteitem_set_custom_data>
                    <class>DeliveryTime/observer</class>
                    <method>setCustomDataOnQuoteItem</method>
                </quoteitem_set_custom_data>
            </observers>
        </sales_convert_quote_item_to_order_item>
</events>
...

Observer.php

...
public function setCustomDataOnQuoteItem(Varien_Event_Observer $observer)
{

    $quote = Mage::getModel('checkout/cart')->getQuote();
    $orderItem = $observer->getOrderItem();
    foreach ( $quote->getAllVisibleItems() as $_item )
    {
        if ($_item->getSku() == $orderItem->getSku())
        {
            $orderItem->setFinalDeliveryTime($_item->getFinalDeliveryTime());
        }
    }
}
...

所以一切都按顺序保存

相关问题