Question

I am trying to get quantity of simple products in the cart but it only returns the configurable quantity.

How can I get product simple qty in cart?

I am using this:

$session = Mage::getSingleton('checkout/session');
$cart = Mage::helper('checkout/cart')->getCart()->getQuote();

foreach ($cart->getItemsCollection() as $item) {
        if($item->getProduct()->getData('type_id') == 'simple'){
            $theqty = $this->escapeHtml($item->getQty());
        }
    }
Was it helpful?

Solution

Here, this should do what you need, you don't need to access the product object, and it's only the price you'd need from the configurable product line in the quote.

$quote = Mage::helper('checkout/cart')->getCart()->getQuote();
$valor = [];

foreach ($quote->getAllItems() as $item) {
        if ('simple' != $item->getProductType()) continue;
        $valor[]= array (
                'id' => $item->getSku(),
                'quantity' => $item->getQty(),
                'price' => $item->getParentItemId() ? $item->getParentItem()->getPrice() : $item->getPrice()
        );
}

$valor_json = json_encode($valor);

OTHER TIPS

$session = Mage::getSingleton('checkout/session');
$cart = Mage::helper('checkout/cart')->getCart()->getQuote();
$ids = array();

foreach ($cart->getAllItems() as $item) {
        $sku = $item->getProduct()->getSku();
        $preco = $item->getProduct()->getPrice();
        $theqty = $this->escapeHtml($item->getQty());
        if($item->getProduct()->getData('type_id') == 'configurable'){
            $sku = Mage::getModel('catalog/product')->load($item->getProductId());
            $valor .= '{ id: "'.$sku->getSku().'", price:'.$preco.', quantity: '.$theqty .'},';
            $sku = $item->getProduct()->getSku();
        }elseif($item->getProduct()->getData('type_id') == 'simple'){
            if (!(in_array($sku, $ids))) {
                $valor .= '{ id: "'.$sku.'", price:'.$preco.', quantity: '.$theqty .'},';
            }
        }
        array_push($ids, $sku);
    }

You can get product quantity without looping all items:

$quote = Mage::getSingleton('checkout/session')->getQuote();
$product = Mage::getModel('catalog/product')->load($product_id);
$_item = $quote->getItemByProduct($product);
$qty = $_item->getQty();

use $cart->getAllItems() to get the simple items too.

You can get product quantity without looping all items:

$quote = Mage::getSingleton('checkout/session')->getQuote();
$_item = $quote->getItemByProduct($product);
$qty = $_item->getQty();
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top