2016-05-18 8 views
1

Ich habe ein bisschen benutzerdefinierte Preise, die für jedes Produkt in einer Reihenfolge ausgeführt werden müssen, die den Endpreis des Artikels ändert.Magento | Artikelpreis im Angebots-Loop aktualisieren

Ich verwende einen Beobachter mit dem Ereignis sales_quote_item_qty_set_after, um sicherzustellen, dass der Preis jedes Mal ausgeführt wird, wenn das Produkt neu konfiguriert wird, da ich nicht in der Lage war, die gewünschten Ergebnisse von anderen Ereignissen zu erhalten.

Das Problem, auf das ich stoße, ist die Unfähigkeit, den Preis des Produkts im Angebot zu ändern, wenn das Angebot mit ->getAllItems() durchlaufen wird.

Ich weiß, dass der Preis über die folgenden für das Produkt Ereignisse hinzufügen überschrieben werden kann.

$_item = $obs->getQuoteItem(); 
$_item = ($_item->getParentItem() ? $_item->getParentItem() : $_item); 
$new_price = 1000; 
$_item->setCustomPrice($new_price); 
$_item->setOriginalCustomPrice($new_price); 
$_item->getProduct()->setIsSuperMode(true); 

Allerdings kann ich keinen Weg finden, es zu tun, wenn ich die Angebotspositionen im Warenkorb durchlaufe. Ist dies möglich, oder müsste die Preisfestsetzung bei einem anderen Beobachter erfolgen, und wenn ja, welche?

Voll Code ist unten ...

public function adminAddProduct(Varien_Event_Observer $obs) { 
    $quote = $this->_getSession()->getQuote(); 
    foreach($quote->getAllItems() as $_item){ 
     $options = $_item->getProduct()->getTypeInstance(true)->getOrderOptions($_item->getProduct()); 
     $_product = $_item->getProduct(); 
     $sku = $options['simple_sku']; 
     if ($sku) { 
      $tierPrices = $_product->getTierPrice(); 
      $price = $_item->getPrice(); 
      $qty = $options['info_buyRequest']['qty']; 

      $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$sku); 
      $runspeed = $product->getResource()->getAttribute('runspeed')->getFrontend()->getValue($product); 

      $prodOpts = []; 
      foreach($options['options'] as $option) { 
       $prodOpts[$option['label']] = $option['value']; 
      } 

      $index = 0; 
      foreach($tierPrices as $tierPrice) { 
       if($tierPrice['price_qty'] <= $qty && $tierPrices[$index + 1]['price_qty'] > $qty) { 
        $price = $tierPrice['price']; 
       } 
       //$prodTiers[$tierPrice['price_qty']] = $tierPrice['price']; 
      } 

      if($prodOpts['Quantity'] == 'Fixed Quantity' && array_key_exists('Quantity Select', $prodOpts)){ 
       $qty = str_replace(',', '', explode(" ", $prodOpts['Quantity Select'])[0]); 
      } else { 
       $qty = 1; 
      } 

      $_item->setQty($qty); 
      $_item->setCustomPrice($customPrice)->setOriginalCustomPrice($customPrice); 

      $new_price = 999; 

      $_item->setPrice($new_price); 
      $_item->setCustomPrice($new_price); 
      $_item->setOriginalCustomPrice($new_price); 
      $_item->save(); 

      Mage::log($price); 
      Mage::log($prodOpts); 
     } 
    } 
} 

Jede Hilfe sehr geschätzt wird.

+0

Bitte posten Sie dies als eine Antwort, so dass es akzeptiert werden kann, funktioniert das perfekt. – Sidriel

Antwort

1

Sie könnten versuchen $quote->save() am Ende Ihrer Funktion.

Verwandte Themen