2013-05-21 66 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或项目对象获得简单的产品。 –

相关问题