magento 默认的价格排序和筛选都是根据最小的价格来的,所谓最小的价格就是它会考虑option,产品的价格会有个index表去记录,包含final price, min price, max price,取产品的时候会带入。
这个虽然说是考虑的更多,但是不直观,直接根据final price来排序和筛选可能会更好,修改如下:
class Mage_Catalog_Model_Resource_Product_Collection
//筛选
protected function _preparePriceExpressionParameters($select)
{
...
$this->_priceExpression = $table . '.min_price'; //改为.final_price
...
}
//排序
public function addAttributeToSort($attribute, $dir = self::SORT_ORDER_ASC)
{
...
if ($attribute == 'price' && $storeId != 0) {
$this->addPriceData();
$this->getSelect()->order("price_index.min_price {$dir}");//.final_price
return $this;
}
...
}