Beobachter checkout_cart_product_add_after erhalten die Produktmenge im Warenkorb
-
16-10-2019 - |
Frage
Ich habe einen Beobachter erstellt, der am Checkout_Cart_Product_add_after abfeuert. Im Beobachter stelle ich die Menge wie folgt fest:
$item->setQty($quantity);
Ich möchte die Menge, die sich bereits im Wagen für dieses Produkt befindet, abrufen, damit die Menge für das Produkt stattdessen aktualisiert oder überschrieben wird. Wenn ich jedoch versuche, die Produktmenge im Wagen (Magier :: Helper ('Checkout/Cart')) zu erhalten, bekomme ich die "neue" Menge, wahrscheinlich weil der Update -Mengencode bereits abgefeuert wurde.
Wie könnte ich die Karrenmenge für das Produkt bekommen?
Danke im Voraus,
Joost
BEARBEITEN:
Dies ist der vollständige Code des Beobachters:
public function modifyPrice(Varien_Event_Observer $obs)
{
$item = $obs->getQuoteItem();
$item = ( $item->getParentItem() ? $item->getParentItem() : $item );
$price = $this->_getPrice($item);
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
$quantity = $this->_getQuantity($item);
$item->setQty($quantity);
$item->getProduct()->setIsSuperMode(true);
}
protected function _getPrice(Mage_Sales_Model_Quote_Item $item)
{
$price = 0;
Mage::app()->getRequest()->getPost();
$qtydropdownbox = Mage::app()->getRequest()->getParam('qtydropdownbox');
$prices = $item->getProduct()->getData('qty_dropdownbox_prices');
$quantities = $item->getProduct()->getData('qty_dropdownbox_quantities');
$array_prices = explode(';', $prices);
$array_quantities = explode(';', $quantities);
$price = $array_prices[$qtydropdownbox] / $array_quantities[$qtydropdownbox];
return $price;
}
protected function _getQuantity(Mage_Sales_Model_Quote_Item $item)
{
$quantity = 0;
Mage::app()->getRequest()->getPost();
$qty = Mage::app()->getRequest()->getParam('qty');
$qtydropdownbox = Mage::app()->getRequest()->getParam('qtydropdownbox');
$quantities = $item->getProduct()->getData('qty_dropdownbox_quantities');
$array_quantities = explode(';', $quantities);
$quantity = $array_quantities[$qtydropdownbox] * $qty;
return $quantity;
}
Lösung
Ich verstehe nicht, was Sie erreichen wollen, aber um die alte Menge zu bekommen, sind Sie zu spät und sogar Origindata wird überschrieben (denke ich), aber überprüfen Sie es.
Ich denke, am einfachsten ist es, sich anzuschließen quote_item_load_after
Und fügen Sie einfach das Qty hinzu, um es später wie $ quoteItem-> setMypersonQty ($ quoteItem-> getQty ()) zu lesen.
Andere Tipps
Sie können die Veranstaltung verwenden sales_quote_product_add_after
die ausgelöst wird, bevor die neuen Artikel gespeichert werden, damit Sie verwenden können $item->getOrigData('qty')
um die ursprüngliche Menge zu bekommen.
Das Ereignis hat einen Parameter, items
Dies ist eine Reihe aller einzelnen Zitatelemente, die für dieses Produkt generiert wurden. Für einfache Produkte ist dies immer ein Artikel. Für Bündel und konfigurierbare Produkte ist es das Element für das Hauptprodukt und seine Kinder. Der Elternteil ist immer der erste Artikel.