The code that drives the price can be found in Mage_Catalog_Model_Product_Type_Price
public function getFinalPrice($qty=null, $product)
{
if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) {
return $product->getCalculatedFinalPrice();
}
$finalPrice = $product->getPrice();
$finalPrice = $this->_applyTierPrice($product, $qty, $finalPrice);
$finalPrice = $this->_applySpecialPrice($product, $finalPrice);
$product->setFinalPrice($finalPrice);
Mage::dispatchEvent('catalog_product_get_final_price', array('product'=>$product, 'qty' => $qty));
$finalPrice = $product->getData('final_price');
$finalPrice = $this->_applyOptionsPrice($product, $qty, $finalPrice);
return max(0, $finalPrice);
}
In _applyTierPrice
$finalPrice = min($finalPrice, $tierPrice);
and through _applySpecialPrice
$finalPrice = min($finalPrice, $specialPrice);
There are no options involved and it will return the minimum price.
In my view this also matches the expectation of the customer!
If you do want to change this behaviour you can observe the event
catalog_product_get_final_price and use $product->setData('final_price',X.YZ); to the value you want.
You can use this extension. This is a free and best among the available. If you can afford paid extensions, there are plenty of em.
So if you use the above extension:
- modify Price.php in module Block\Catalog\Layer\Filter.
- change setMinPrice() and setMaxPrice()
change $this->_minPrice = $this->_productCollection->getFirstItem()->getPrice();
to $this->_minPrice = $this->_productCollection->getFirstItem()->getTierPrice();
note: didn't test it. If you have problems revert back.
Best Answer
In theory this should work.
But it seams there is an issue that wasn't fixed until now.
A possible workaround could be this:
Even if this works, I'm not sure it's a good idea to load the product in a loop (performance).
To overcome this, I think you can set the attribute
tier_price
to beUsed in Product Listing
and then you should be able to skip theload
part and use only:But I haven't tested it.