2013-11-01 78 views
2

我已經使用下面的代碼將選項傳遞到報價項目,然後將其添加到購物車。這些選項在結賬過程中顯示得很好,但一旦訂單被放置就會消失。這些選項不會顯示在訂單的確認電子郵件中,訂單審閱頁面或後端中。我需要這些選項來堅持以後再審查。Magento報價項目的選項不堅持到最終訂單

$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

您可以檢查此鏈接:http://stackoverflow.com/questions/9412074/magento-quote- order-product-item-attribute-based-on-user-input/9496266#9496266注意該段落:「添加選項以訂購商品」。我假設你的問題類似於「基於用戶輸入的Magento - 引用/訂購產品項目屬性」 - http://stackoverflow.com/questions/9412074/magento-quote-order-product-item-attribute-based- on-user-input – ceckoslab

+1

我已經多次閱讀過這篇文章,但沒有成功,但在第10次再次閱讀並查閱關於模塊創建的文章後,我才得以運行。謝謝。 – swiftikasu

回答

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); 
    } 
} 
?>