1

我们的一位供应商拥有实时库存系统,我们希望将其实施到我们的网站中。当一个人点击产品时,它应该检查库存并根据需要进行更新。这充其量可以正常工作。问题是当产品切换到有货/无货时。它在后端正确更新,但我无法添加/删除 addtocart 按钮。这是我更新股票的代码:

//$_stockQTY is the realtime inventory result

$stockData = Mage::getModel('cataloginventory/stock_item');
$stockData->loadByProduct($_product->getId());
$stockData->setData('qty', $_stockQTY);                    
$stockData->setData('is_in_stock',($_stockQTY > 0) ? 1 : 0); 
 if ($stockData->dataHasChangedFor('qty')) {
    $stockData->save();
    $_product = Mage::getModel('catalog/product')->load($_product->getId());
}

如您所见,当数量发生变化时,我会强制重新加载产品。这似乎适用于除 addtocart 按钮之外的所有内容。它显示以前的结果(重新加载前有库存或无库存。)

我有两个问题:

除了像我上面所做的那样重新分配产品之外,有没有更好的方法来重新加载产品:

$_product = Mage::getModel('catalog/product')->load($_product->getId());

为什么一切都在正确更新,但使用相同的 addtocart

$_product->isSaleable()

称我们的可用性等使用。

相比:

<?php if($_product->isSaleable()): ?>
                <p class="availability in-stock"><img src="<?php echo $this->getSkinUrl('images/stock.png') ?>"> <span><?php echo $this->__('In stock') ?></span>
...
?>

<?php if($_product->isSaleable()): ?>
                        <?php echo $this->getChildHtml('addtocart') ?>
<?php endif; ?>
<?php echo $this->getChildHtml('alert_urls') ?> //Only Shows up if addtocart does not.

刷新页面将正确更新产品,但进行元刷新或任何类似的操作都是不可能的。我很感激任何可以给出的建议,因为我想解决这个问题并继续下一个任务。

4

1 回答 1

0

Unless I'm misunderstanding your question, it appears the thorn in your side is the stock status index.

Try this:

Mage::getSingleton('cataloginventory/stock_status')->updateStatus($_product->getId());

(I haven't tested this, but it looks like it ought to work)

于 2012-02-24T07:01:49.930 回答