2013-05-21 65 views
0

用一個簡單的產品,我可以這樣做:如何獲得購物車中已配置物品的庫存?

$quote = Mage::getSingleton('checkout/session')->getQuote(); 
$item = $quote->getItemById($params['item']); // $params['item'] contains item id 
$product = $item->getProduct(); 
$stockQty = (int)Mage::getModel('cataloginventory/stock_item')->loadByProduct($product)->getQty(); 

然而,如果該項目是一個配置的產品,它試圖讓其父配置的產品,在大多數情況下具有零存貨的股票。

如何獲得已配置產品的庫存數量,最好不通過其可配置父級的子產品進行循環?

回答

3

您可以設置決定取決於配置產品的兒童的股票狀況股票狀況的變量:

$inStock = true; 
$quote = Mage::getSingleton('checkout/session')->getQuote(); 
$cart = Mage::getModel('checkout/cart')->getQuote(); 

$item = $quote->getItemById($params['item']); // $params['item'] contains item id 
$_product = $item->getProduct(); 
$configuredProduct = Mage::getModel('catalog/product_type_configurable')->setProduct($_product); 
$children = $configuredProduct->getUsedProductCollection()->addAttributeToSelect("*")->addFilterByRequiredOptions(); 
foreach($children as $simpleProduct) { 
    foreach ($cart->getAllItems() as $item) { 
     if ($item->getProduct()->getId() != $simpleProduct->getId()) continue; 

     $stockQty = (int)Mage::getModel('cataloginventory/stock_item')->loadByProduct($simpleProduct)->getQty(); 
     if ($stockQty <= 0) { 
      $inStock = false; 
      break; 
     } 
    } 

} 
+0

這不會在所有的工作,不同的變化/孩子們可以有不同的庫存水平,這無助於找到正確的產品。 – Andrew

+0

只需在for循環中添加一個額外的IF條件來檢查子匹配項? – Kenny

+0

我問這個問題的原因是因爲我正在尋找一種解決方案,它不會遍歷所有的孩子,但不知何故直接從項目ID或項目對象獲得簡單的產品。 –

相關問題