Respostas:
O código que você mencionou sempre funcionou para mim. Eu acho que depende de como você recebe o $product
.
Se você fizer isso, deve funcionar.
$product = Mage::getModel('catalog/product')->load($id);
se você obtiver os produtos de uma coleção, obtenha a coleção assim:
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
->addMinimalPrice()
->addFinalPrice()
->addTaxPercents() //additional filters go here;
Agora você pode percorrer a coleção e fazer sua verificação.
foreach ($collection as $product){
if($product->getFinalPrice() < $product->getPrice()){
//had a discount
}
}
Esse método leva em consideração o desconto oferecido por preços especiais e regras de preços de catálogo.
Informação adicional. Um tópico pouco interessante, mas útil: veja como você pode obter a lista de produtos com desconto
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
->addMinimalPrice()
->addFinalPrice()
->addTaxPercents()
->addUrlRewrite();
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
$collection->getSelect()->where("`price_index`.price !=price_index.min_price");
Eu acredito que você está procurando $product->getPrice()
e $product->getSpecialPrice()
.