Magento报价项目的选项不会保留到最终顺序中


Magento Quote Item's Options Do Not Persist Into Final Order

我使用以下代码将选项传递给报价项,然后再将其添加到购物车。 这些选项在整个结帐过程中显示得很好,但在下订单后就会消失。 这些选项不会显示在订单的确认电子邮件、订单审核页面或后端中。 我需要这些选项来保留以供以后查看。

$cart = Mage::getModel('checkout/cart')
$quote = Mage::getSingleton('checkout/session')->getQuote()
$product = Mage::getModel('catalog/product')->load(7)
$quoteItem=Mage::getModel('sales/quote_item')->setProduct($product)
$a_options = array(
   'options1' => array(
      'label' => 'Ingredients',
      'value' => $recipecontents,
   ),
   'options2' => array(
      'label' => 'Crush Grains',
      'value' => $crush,
   ),
);
$quoteItem->addOption(new Varien_Object(
    array(
        'product' => $quoteItem->getProduct(),
        'code' => 'additional_options',
        'value' => serialize($a_options)
    )
));
$quote->addItem($quoteItem)
$cart->save()

变量$recipecontents和$crush是使用从表单传递的数据在代码前面定义的。

其他一切都有效,但是一旦下订单,Magento就会忘记选项的设置。 我需要这些值保留到后端以填写订单。 我正在使用社区版 1.7.0.2。

有谁知道为什么这些价值观会丢失以及如何防止它发生?

在你的配置中.xml

    <events>
        <sales_convert_quote_item_to_order_item>
            <observers>
                <Your_Module>
                    <type>model</type>
                    <class>Your_Module_Model_Observer</class>
                    <method>salesConvertQuoteItemToOrderItem</method>
                </Your_Module>
            </observers>
        </sales_convert_quote_item_to_order_item>
    </events>

然后在您的观察者中.php

<?php
public function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer)
{
    $quoteItem = $observer->getItem();
    if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {
        $orderItem = $observer->getOrderItem();
        $options = $orderItem->getProductOptions();
        $options['additional_options'] = unserialize($additionalOptions->getValue());
        $orderItem->setProductOptions($options);
    }
}
?>