2012-06-06 4 views
9

Ich betreibe Magento 1.7.Hinzufügen einer benutzerdefinierten Option zu einem Angebotsartikel (Produkt im Warenkorb)?

Ich versuche, eine Angebotsoption, eine benutzerdefinierte, in sales_flat_quote_item_option hinzuzufügen.

Ich habe mit addOption und addCustomOption Funktionen versucht, aber es scheint, dass keine Abfrage in die Datenbank gestartet wird.

Das ist mein Code jetzt ist (in einem Helfer benutzerdefinierten Modul):

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

Dies wird wahrscheinlich beantwortet (sehr gut) hier: http://stackoverflow.com/a/9344336/833795 – benmarks

+1

möglich Duplikat [Magento ändern Benutzerdefinierte Option Wert, bevor es an dem Warenkorb hinzufügen ] (http://stackoverflow.com/questions/9334115/magento-change-custom-option-value-before-adding-it-to-cart) – Alex

+0

hast du versucht, try catch exception zu speichern()? – srgb

Antwort

2

Ja, das ist möglich, Sie müssen den Betrachter

ich Zugabe wurden mit jedem Produkt Datum Lieferung verwenden, in Die Bestellungen

So können Sie dies als die Option ändern, die Sie zu jedem Produkt hinzufügen möchten.

  <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; 
} 
Verwandte Themen