Один из наших поставщиков имеет систему инвентаризации в реальном времени, и мы хотели бы внедрить ее на нашем сайте. Когда человек нажимает на продукт, он должен проверить инвентарь и обновить при необходимости. Это работает хорошо в лучшем случае. Проблема заключается в том, когда продукт переключается на наличие или отсутствие на складе. Он корректно обновляется в бэкэнде, но я не могу добавить / удалить кнопку 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. Показывает предыдущий результат (На складе или на складе до перезагрузки.)
У меня есть 2 вопроса:
Есть ли лучший способ перезагрузить продукт, кроме переназначения его, как я делаю выше:
$_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.
Обновление страницы обновит продукт должным образом, но о мета-обновлении или чем-то подобном не может быть и речи. Я благодарен за любой совет, который можно дать, поскольку я хотел бы решить эту проблему и перейти к следующему заданию.