2013-07-21 5 views
5

Spero che qualcuno mi può aiutare ...Citazione perdersi dopo la modifica un elemento

L'obiettivo è quello di mettere i prodotti separati al carrello. Quindi se 2 prodotti con lo stesso ID sono nel carrello, devono essere mostrati e gestiti separatamente e non come un prodotto/articolo con il numero 2.

Per raggiungere questo scopo, utilizzo le opzioni e gli eventi degli articoli di preventivo.

evento: checkout_cart_product_add_after Codice:

 $quoteItem->addOption(new Varien_Object(
     array(
      'product' => $quoteItem->getProduct(), 
      'code' => 'unique_id', 
      'value' => $uniqueId 
    ) 
)); 

Ho anche provato la stessa utilizzando addional_options:

$additionalOptions = array(
      array(
       'code' => 'unique_id', 
       'label' => 'Uniaue ID', 
       'value' => $uniqueId 
      ) 
     ); 
    $quoteItem->addOption(
      array(
       'code' => 'additional_options', 
       'value' => serialize($additionalOptions), 
      ) 
     ); 

Dopo di che - tutto funziona bene. Le opzioni sono mostrate nel carrello e sono state memorizzate nel database (sales_flat_quote_item_option) e hanno tutte il loro id-articolo.

Ma se modifico un prodotto e metterlo di nuovo nel carrello - le opzioni addional si perdono, non sono più nel database sono ... Ciò riguarda tutti i prodotti con lo stesso ID nel carrello ...

Sarà bello, se qualcuno può aiutarmi ...

+0

E 'molto utile per porre domande - spesso questo è esattamente il momento, la soluzione è stata trovata da sola ... Così - per il vostro interesse: La soluzione è quella di utilizzare il event: catalog_product_type_prepare_full_options $ product-> addCustomOption ('unique_id', $ uniqueId); –

+7

Per favore aggiungilo come risposta, sarà utile per gli altri –

risposta

0

Ho avuto loro lo stesso problema e ho usato un approccio completamente diverso. Ho fatto un modulo per esso e ha aggiunto quanto segue in config.xml

<global> 
    <models>    
     <sales> 
      <rewrite> 
       <!-- Model --> 
       <quote>Companyname_Modulename_Model_Override_Mage_Sales_Model_Quote</quote> 
      </rewrite> 
     </sales> 
... 

E ha creato:

app/code/comunità/companyname/Modulename/Modello/Override/Mage/Vendite/Modello /Quote.php

Con questo codice: (leggermente modificato dal codice Magento originale)

<?php 
class Companyname_Modulename_Model_Override_Mage_Sales_Model_Quote extends Mage_Sales_Model_Quote 
{ 
    /** 
    * Adding catalog product object data to quote 
    * 
    * @param Mage_Catalog_Model_Product $product 
    * @return Mage_Sales_Model_Quote_Item 
    */ 
    protected function _addCatalogProduct(Mage_Catalog_Model_Product $product, $qty = 1) 
    { 
     $newItem = false; 
     $item = $this->getItemByProduct($product); 
     $item = false; 
     if (!$item) { 
      $item = Mage::getModel('sales/quote_item'); 
      $item->setQuote($this); 
      if (Mage::app()->getStore()->isAdmin()) { 
       $item->setStoreId($this->getStore()->getId()); 
      } else { 
       $item->setStoreId(Mage::app()->getStore()->getId()); 
      } 
      $newItem = true; 
     } 

     /** 
     * We can't modify existing child items 
     */ 
     if ($item->getId() && $product->getParentProductId()) { 
      return $item; 
     } 

     $item->setOptions($product->getCustomOptions()) 
      ->setProduct($product); 

     // Add only item that is not in quote already (there can be other new or already saved item 
     if ($newItem) { 
      $this->addItem($item); 
     } 

     return $item; 
    } 
} 

In questo modo forza ogni prodotto da aggiungere separato al carrello, questo è particolarmente utile se si aggiunge l'opzione di inserire commenti per prodotto nel carrello, quindi le persone aggiungono gli stessi prodotti con commenti diversi.

Spero che aiuta qualcun altro :)