Cómo verificar si el producto tiene descuento

13

¿Cómo puedo saber si el producto tiene un descuento actualmente?

Usé este código.

if($product->getFinalPrice() < $product->getPrice()){
   //had a discount
}

Pero no funciona.

Netorica
fuente
Creo que necesitas un precio especial?
Keyul Shah

Respuestas:

13

El código que mencionaste siempre funcionó para mí. Creo que depende de cómo consigas el $product.
Si haces esto, debería funcionar.

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

Si obtiene los productos de una colección, obtenga la colección de esta manera:

$collection = Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
            ->addMinimalPrice()
            ->addFinalPrice()
            ->addTaxPercents() //additional filters go here;

Ahora puede recorrer la colección y hacer su verificación.

foreach ($collection as $product){
    if($product->getFinalPrice() < $product->getPrice()){
       //had a discount
    }
}

Este método tiene en cuenta el descuento proporcionado por precios especiales y reglas de precios de catálogo.

Información adicional. Un poco fuera de tema pero útil: así es como puede obtener la lista de productos que tienen un descuento

$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");
Marius
fuente
5

Creo que estás buscando $product->getPrice()y $product->getSpecialPrice().

musicliftsme
fuente
2
Sin embargo, esto no detectará si el producto está en descuento a través de una regla de precio de catálogo.
ProxiBlue