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;
    }
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top