2012-06-06 34 views
9

मैं Magento 1.7 चला रहा हूँ।उद्धरण आइटम (कार्ट में उत्पाद) में एक कस्टम विकल्प जोड़ें?

मैं sales_flat_quote_item_option में एक उद्धरण आइटम विकल्प, एक कस्टम जोड़ने की कोशिश कर रहा हूं।

मैंने addOption और addCustomOption फ़ंक्शंस के साथ प्रयास किया है, लेकिन ऐसा लगता है कि डेटाबेस में कोई क्वेरी लॉन्च नहीं की गई है।

यह (कस्टम मॉड्यूल सहायक में) अभी मेरी कोड है:

public function assignDocumentToQuoteItem(Mage_Sales_Model_Quote_Item $quoteItem, $documentid) 
{ 
    if (is_numeric($documentid) && $documentid > 0) { 
     /** @var Mage_Catalog_Model_Product */ 
     $product = $quoteItem->getProduct(); 

     $quoteItem->addOption(array(
      'product_id' => $product->getId(), 
      'product' => $product, 
      'code'  => 'documentid', 
      'value'  => $documentid 
     )); 
     $quoteItem->save(); 
     return true; 
    } 

    throw new Exception(__METHOD__.' - Document id has to be a numeric value.'); 
} 
+4

यह संभावना उत्तर दिया जाता है (बहुत अच्छी तरह से) यहाँ: http://stackoverflow.com/a/9344336/833795 [Magento परिवर्तन कस्टम विकल्प मूल्य की – benmarks

+1

संभव डुप्लिकेट गाड़ी में जोड़ने से पहले ] (http://stackoverflow.com/questions/9334115/magento-change-custom-option-value-before-adding-it-to-cart) – Alex

+0

क्या आपने सहेजने के लिए प्रयास अपवाद जोड़ने का प्रयास किया है()? – srgb

उत्तर

2

हाँ यह संभव है, आप पर्यवेक्षक

मैं में प्रत्येक उत्पाद के साथ जोड़ने की है डिलीवरी की तारीख उपयोग करने की आवश्यकता आदेश

तो आप इसे उस विकल्प के रूप में बदल सकते हैं जिसे आप प्रत्येक उत्पाद में जोड़ना चाहते हैं।

  <controller_action_predispatch_checkout> 
      <observers> 
       <options_observer> 
        <class>YOUR_CLASS_NAME</class> 
        <method>setProductInfo</method> 
       </options_observer> 
      </observers> 
     </controller_action_predispatch_checkout> 

public function setProductInfo($observer) 
{ 
    if ('checkout_cart_add' != $observer->getEvent()->getControllerAction()->getFullActionName()) { 
     return; 
    } 
    $request = Mage::app()->getRequest(); 
    $prId = $request->getParams(); 
    $product = Mage::getModel('catalog/product')->load($prId['product']); 
    // fixed spelling of cofigurable/configurable 
    if ($product->getTypeId() == 'configurable') { 
     return $this; 
    } 

    if (!$product->getHasOptions()) { 
     $optionID = $this->saveProductOption($product); 
    } else { 
     $options = $product->getOptions(); 
     if ($options) { 
      foreach ($options as $option) { 
       if ($option->getTitle() == 'Delivery Date') { 
        $optionID = $option->getOptionId(); 
       } 
      } 
     } 
     if (empty($optionID)) { 
      $optionID = $this->saveProductOption($product); 
     } 
    } 

    $deliveryDate = $prId['delivery_date']; 
    if (!empty($deliveryDate)) { 
     $opt['options'] = array($optionID => $deliveryDate); 
     $request->setParams($opt); 
    } 

    return $this; 
} 

function saveProductOption($product) 
{ 

    $store = Mage::app()->getStore()->getId(); 
    $opt = Mage::getModel('catalog/product_option'); 
    $opt->setProduct($product); 
    $option = array(
     'is_delete' => 0, 
     'is_require' => false, 
     'previous_group' => 'text', 
     'title' => 'Delivery Date', 
     'type' => 'field', 
     'price_type' => 'fixed', 
     'price' => '0.0000' 
    ); 
    $opt->addOption($option); 
    $opt->saveOptions(); 
    Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID)); 
    $product->setHasOptions(1); 
    $product->save(); 

    $options = $product->getOptions(); 
    if ($options) { 
     foreach ($options as $option) { 
      if ($option->getTitle() == 'Delivery Date') { 
       $optionID = $option->getOptionId(); 
      } 
     } 
    } 
    Mage::app()->setCurrentStore(Mage::getModel('core/store')->load($store)); 
    return $optionID; 
}