$this 是什么? Mage_Catalog_Block_Product_List?你为什么要传递idSuffix = '-bestseller'?我想你应该打电话给$this->getPriceHtml($_product, true);
**编辑
所以现在我在想两件事:
a)根据您上面的评论,我认为您每次都想获得一个新的模型实例。所以在循环内部要么用Mage::getModel('catalog/product');替换$model,要么重新声明
$model = Mage::getModel('catalog/product');
在循环的开始。
或
b) 按照您在下面的评论并重新审视这一点,我认为您可能需要在生成价格 HTML 之前获取价格,因此请尝试添加以下行:
$dummyPrice = $model->getPrice();
在echo 'product price = '.$this->getPriceHtml($_product, true) 之前。实际上这可能是问题:因为您使用相同的实例 $model 并将新产品加载到旧产品之上,我认为 $model 持有第一个 '$_product->getPrice()' 价格计算,然后没有重新计算它,因为函数是:
public function getPrice()
{
if ($this->_calculatePrice || !$this->getData('price')) {
return $this->getPriceModel()->getPrice($this);
} else {
return $this->getData('price');
}
}
如果您不执行上述 a),我认为您需要在每个 $model->load(); 之后强制重新计算价格,因此在这种情况下您的循环将是
//load product data over the top of the previous loaded product
$_product = $model->load($result[$cnt]);
//force price recalculation
$_product->getPriceModel()->getPrice($_product);
//now ask for the price as HTML
echo 'product price = '.$this->getPriceHtml($_product, true);
但我认为最好在每个循环上使用Mage::getModel('catalog/product');,因为我们不知道 Magento 还清除或覆盖了什么。
这提出了一些有趣的问题:所有模型实例都去哪里了?进入记忆?也许。我挖了一下,发现an interesting article by Drew Gillson关于这个功能
Mage_Core_Model_Abstract::clearInstance();
所以现在我也在学习东西,我认为你想要这样的循环:
for($cnt = 0; $cnt<count($result); $cnt++){
//load product data
$_product = $model->load($result[$cnt]);
//display product name
echo 'product name = '.$this->htmlEscape($_product->getName());
echo '<br>';
//display product price
echo 'product price = '.$this->getPriceHtml($_product, true);
//clear the $model for next time round (I reckon this will clear the calculated price too)
$model->clearInstance();
}
毕竟,如果仍然无法解决,我建议进行更多调试。如果您得到正确的产品名称,那是令人鼓舞的。
在您的产品循环中也回显:
$_product->getId();
$_product->getSku();
$_product->getData('price');
$_product->getPrice('');
$_product->getPriceModel()->getPrice($_product);
$_product->getPriceModel()->getBasePrice($_product);
$_product->getPriceModel()->getFinalPrice($_product);
$_product->getData('price');
$_product->getFormatedPrice('');
这应该有助于确认您正在加载正确的产品信息并公开可用的信息,并希望能够阐明您为什么没有获得预期的价格。对于等级价格、特价和最低价格,还存在许多其他价格函数。
如果它仍然没有执行您想要的操作,请仔细查看您的 Magento 设置并完成重新索引和缓存刷新。
您还可以选择一个您知道其价格的 SKU,并将其传递给您的代码以查看它是否返回预期价格。