2012-04-09 12 views
1

Ich muss eine Möglichkeit für Kunden schaffen, ein einziges Produkt kostenlos (als Beispiel) im Magento Shop anzubieten. Ich habe herausgefunden, die meisten Dinge von this Post, aber jetzt habe ich ein Problem. Ich bin eine Observer-Methode erstellt, die auf checkout_cart_product_add_after ausgeführt wird. Und da habe ich einige Codes (es ist nur ein Teil der ganzen Sache):Produkt in den Warenkorb legen in Beobachter

$productId = $observer->getProduct()->getId(); 
    $cartHelper = Mage::helper('checkout/cart'); 
    $items = $cartHelper->getCart()->getItems(); 
    Mage::getModel('core/session')->addNotice('Product id: '.$productId); 
    foreach ($items as $item) { 
     if ($item->getProduct()->getId() == $productId) { 
       $itemId = $item->getItemId(); 
       $cart = $cartHelper->getCart()->removeItem($itemId)->save() ;//It WORKS!!!!!!!!!!!! 
       $product = Mage::getModel('catalog/product')->load($productId); 
       $cart->addProduct($product, $this->_getRequest()->getParams());      
        $cart->save(); 
        Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 
        break; 
       } 
      } 

Also zunächst einmal meinen Code fügt ein Produkt in Korb mit 0,00 Preis (Produkt als ein Beispiel), basierend auf einigen Anforderungsparametern. Dieser Teil funktioniert gut, so dass es hier nicht veröffentlicht wird. Der zweite Teil (den ich oben gepostet habe) muss ein existierendes Produkt löschen und durch ein Produkt mit normalem Preis ersetzen. Fast alles funktioniert gut bis auf eine Sache - die Linie $cart->addProduct($product, $this->_getRequest()->getParams()); funktioniert nicht und ich kann nicht verstehen warum (keine Fehler, keine Ausnahmen, keine Protokolle). _getRequest Methode sieht wie folgt aus:

protected function _getRequest() 
    { 
     return Mage::app()->getRequest(); 
    } 

Und wenn ich ein $this->_getRequest()->getParams() log es wird so etwas wie dieses:

2012-04-09T14:46:56+00:00 DEBUG (7): Array(
    [uenc] => aHR0cDovL2xvY2FsaG9zdC93b3AvZmVhdHVyZWQvY2xhc3NpYy1saW5lLXBvbHkuaHRtbA,, 
    [product] => 50 
    [related_product] => 
    [bundle_option] => Array(
      [20] => 75 
      [21] => 84 
      [22] => 94 
     ) 
    [qty] => 1 
    [send-request] => 0 
) 

Warum also, dass $cart->addProduct($product, $this->_getRequest()->getParams()); wird nicht funktionieren? Wie geht es richtig? Vielleicht ist es besser, addAction() von Mage_Checkout_CartController zu verwenden (überschreiben)? Entschuldigung für meine Sprache. Danke für die Antworten. Hoffe jemand kann mir helfen ...

+0

Es scheint, als ob Sie das gleiche Produkt hinzufügen, das Sie entfernen (Sie verwenden beide Male die gleiche $ productId. Ist das, was Sie wollten? –

+0

Ja, ist es. Die Logik davon ist, Produkt mit normalem Warenkorb zu Warenkorb Preis, wenn dieses Produkt bereits vorher mit 0.00 Preis hinzugefügt wurde.Vielleicht würde ich lieber nur den Preis eines Angebotes ändern, aber ich denke, es wird nicht funktionieren .. – alphacentauri

+0

Solltest du nicht mit dem QUOTE vs. Produkte werden dem Angebot hinzugefügt, bevor der Kaufvorgang beginnt – MB34

Antwort

0

Ich werde meine Frage beantworten, um Dinge für jeden zu klären, der das gleiche Problem stolpern wird. Der Code:

$cart->addProduct($product, $this->_getRequest()->getParams()); 

wird nicht funktionieren, weil ich $cart->save() bevor es nennen und als versucht, das gleiche, nachdem es zu tun, und das war das Problem. Wenn ich zuerst $cart->save() entfernte, funktioniert es gut.

Verwandte Themen