Как проверить, нет ли на складе конфигурируемого продукта?

Все мы знаем, что настраиваемый продукт в magento ассоциируется с простым продуктом.

Если простые продукты, связанные с настраиваемым продуктом, становятся Inventory = 0, это означает, что настраиваемый продукт отсутствует на складе.

Итак, вопрос в том, как определить, что конфигурируемый продукт отсутствует на складе? Я хочу обнаружить, чтобы я мог отображать во внешнем интерфейсе текст «Нет в наличии».

что-то вроде этого

if($configurable_product->isOutOfStock()) {
   echo "Out of Stock";
}

Как я могу сделать это в Magento?


person Bogz    schedule 15.08.2014    source источник


Ответы (5)


if (!$configurable->isSaleable() ||$configurable_product->getIsInStock()==0){
// out of stock
}

Для проверки дочернего простого продукта:

$allProducts = $configurable->getTypeInstance(true)
                ->getUsedProducts(null, $configurable);
            foreach ($allProducts as $product) {
                if (!$product->isSaleable()|| $product->getIsInStock()==0) {
                    //out of stock for check child simple product
                }
            }
person Amit Bera    schedule 15.08.2014
comment
ваш первый код не работает для меня. однако ваш второй код работает, поэтому я использовал его, даже если он медленнее, так как мне нужно зациклить все продукты, связанные с настраиваемым продуктом. - person Bogz; 15.08.2014

$_productCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToFilter('type_id', array('eq' => 'configurable'));

Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($_productCollection);

Это показывает только настраиваемые продукты, которые есть на складе.

person Manashvi Birla    schedule 01.05.2015

Просто небольшое обновление/исправление ответа Quovadisqc. При определении $qty должно быть

$qty = $stockItem->getData('qty'); // correct

Вместо того, что сейчас есть,

$qty = $stockItem->setData('qty'); // incorrect

Я бы опубликовал это как комментарий, но у меня недостаточно представителей.

person Nemery    schedule 24.07.2015

В цикле foreach продуктов работает следующий оператор if.

if ($product->getIsInStock() === '1' && $product->isSaleable() === true) {
    echo 'this product is in stock';
}
person Matt Doran    schedule 20.08.2015

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
$qty = $stockItem->getData('qty');
$inStock = $stockItem->getData('is_in_stock');

if ($qty < 1 || $inStock == 0) {
    // OutOfStock
}

Я предпочитаю дважды проверять количество, так как продукты не всегда будут отсутствовать на складе при количестве == 0 в зависимости от настроек конфигурации.

person Quovadisqc    schedule 15.08.2014