2013-07-21 8 views
5

Mam nadzieję, że ktoś może mi pomóc ...Cytuj Opcja pozycji gubi się po edycji jednego elementu

Celem jest wyodrębnienie produktów do koszyka. Jeśli więc w koszyku znajdują się 2 produkty o tym samym identyfikatorze, należy je pokazać i obsługiwać osobno, a nie jako jeden produkt/sztukę o liczbie 2.

Aby to osiągnąć, używam opcji i zdarzeń pozycji cudzysłowu.

zdarzenia: checkout_cart_product_add_after Kod:

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

Próbowałem też te same pomocą addional_options:

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

Po tym - wszystko działa poprawnie. Opcje są wyświetlane w koszyku i zostały zapisane w bazie danych (sales_flat_quote_item_option) i wszystkie mają własny identyfikator produktu.

Ale jeśli edytuję jeden produkt i wkładam go ponownie do koszyka - opcje dodatkowe giną, nie są już w bazie danych ... Dotyczy to wszystkich produktów o tym samym ID w koszyku ...

Będzie mi miło, jeśli ktoś może mi pomóc ...

+0

Jest to bardzo pomocne do zadawania pytań - często jest to dokładnie ten moment, rozwiązanie zostało znalezione przez siebie ... Tak - za zainteresowanie: Rozwiązaniem jest użycie event: katalog_produkt_type_prepare_full_options $ product-> addCustomOption ('unique_id', $ uniqueId); –

+7

Dodaj jako odpowiedź, przyda się innym –

Odpowiedz

0

Miałem ten sam problem i zastosowałem zupełnie inne podejście. Zrobiłem moduł do niej i dodano następujące w config.xml

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

i stworzył:

app/code/społeczność/firmy/modulename/Model/nadpisać/Mage/Sprzedaż/modelu /Quote.php

z następującego kodu: (lekko edytowane z oryginalnego kodu Magento)

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

W ten sposób zmusza każdy produkt do dodania oddzielony do koszyka, jest to szczególnie miłe, jeśli dodasz opcję umieszczania komentarzy na produkcie w koszyku, a następnie ludzie dodają te same produkty z różnymi komentarzami.

Mam nadzieję, że to pomoże ktoś inny :)

Powiązane problemy