getAllNominalItems(); if (!count($items)) { return $this; } // estimate quote with all address items to get their row weights $this->_shouldGetAllItems = true; parent::collect($address); $address->setCollectShippingRates(true); $this->_shouldGetAllItems = false; // now $items contains row weight information // collect shipping rates for each item individually foreach ($items as $item) { if (!$item->getProduct()->isVirtual()) { $address->requestShippingRates($item); $baseAmount = $item->getBaseShippingAmount(); if ($baseAmount) { $item->setShippingAmount($address->getQuote()->getStore()->convertPrice($baseAmount, false)); } } } return $this; } /** * Don't fetch anything * * @param Mage_Sales_Model_Quote_Address $address * @return array */ public function fetch(Mage_Sales_Model_Quote_Address $address) { return Mage_Sales_Model_Quote_Address_Total_Abstract::fetch($address); } /** * Get nominal items only or indeed get all items, depending on current logic requirements * * @param Mage_Sales_Model_Quote_Address $address * @return array */ protected function _getAddressItems(Mage_Sales_Model_Quote_Address $address) { if ($this->_shouldGetAllItems) { return $address->getAllItems(); } return $address->getAllNominalItems(); } }