Проблема Magento с вызовом метода isInStock() на продукте

Я хочу проверить, имеются ли какие-либо продукты на складе, но что бы я ни делал, метод isInStock() всегда возвращает TRUE. Мои продукты - это настраиваемые продукты без связанных продуктов, а на вкладке "Инвентарь" "Доступность акций" установлено значение "Нет на складе". Что я делаю не так? Спасибо!

Ответы

Ответ 1

Magento имеет много истории на данный момент, поэтому неплохо не всегда что имена методов будут делать то, что "кажется очевидным". Очевидно, что это было несколько лет назад.

Если вы посмотрите на следующие два метода в классе Mage_Catalog_Model_Product

public function isInStock()
{
    return $this->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_ENABLED;
}
public function getStatus()
{
    return $this->_getData('status');
}

Вы можете видеть, что isInStock проверяет атрибут статус, заданный в разделе "Общие" администратора продукта.

Попробуйте это вместо

$stockItem = $product->getStockItem();
if($stockItem->getIsInStock())
{
    //in stock!
}
else
{
    //not in stock!
}

Ответ 2

$qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty();

Ответ 3

<?php if ((int) Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty()>0) { ?>

 <?php  } else {} ?>

Он работал для простого представления категории продукта.