Observer checkout_cart_product_add_after ottenere quantità di prodotto nel carrello
-
16-10-2019 - |
Domanda
Ho costruito un osservatore che spara a checkout_cart_product_add_after. Nell'osservatore ho impostato la quantità in questo modo:
$item->setQty($quantity);
Vorrei prendere la quantità che è già nel carrello per quel prodotto, in modo che la quantità del prodotto viene aggiornato al posto o sovrascritti. Eppure, quando si tenta di ottenere la quantità di prodotto nel carrello (Mage :: helper ( 'cassa / carrello')), ho la "nuova" quantità, probabilmente perché il codice quantità aggiornamento è già sparato.
Come ho potuto ottenere la quantità della spesa per il prodotto?
Grazie in anticipo,
Joost
EDIT:
Questo è il codice completo di chi osserva:
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;
}
Soluzione
Non capisco che cosa si vuole raggiungere, ma per ottenere il vecchio quantità si è troppo tardi e anche origData viene sovrascritto (credo), ma controllarlo.
Credo che il modo più semplice è quello di collegare in quote_item_load_after
e basta aggiungere il qty di leggere in un secondo momento come $ quoteItem-> setMyPersonalQty ($ quoteItem-> getQty ())
Altri suggerimenti
È possibile utilizzare l'sales_quote_product_add_after
evento che si attiva prima che i nuovi elementi vengono salvati, in modo da poter utilizzare $item->getOrigData('qty')
per ottenere la quantità originale.
L'evento ha un parametro, items
che è un array di tutti gli elementi preventivo singoli che sono stati generati per questo prodotto. Per i prodotti semplici questo è sempre un elemento, per i bundle ed i prodotti configurabili, è l'elemento per il prodotto principale e dei suoi figli, il genitore essere sempre la prima voce.