在将选项添加到购物车之前,我已使用以下代码将选项传递到报价项目。选项在结帐过程中显示为正常,但一旦下订单就会消失。选项不会显示在订单的确认电子邮件中,订单审核页面或后端。我需要这些选项以供日后查看。
$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就会忘记选项的设置。我需要将这些值保留在后端以填充订单。我正在使用Community Edition 1.7.0.2。
有谁知道为什么这些价值被丢失以及如何防止这种情况发生?
答案 0 :(得分:1)
在你的config.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>
然后在你的Observer.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);
}
}
?>