我已经查看了我发现的与排序相关的几个帖子,但没有提出所需的解决方案。
我目前正在使用以下代码对类别视图字段中的产品进行排序,以覆盖默认选项并按toolbar.phtml中的属性排序。
<option value="<?php echo $this->getOrderUrl('name', 'asc') ?>"<?php if($this->isOrderCurrent('name')): ?> selected="selected"<?php endif; ?>>
NAME
</option>
<option value="<?php echo $this->getOrderUrl('short_description', 'asc') ?>"<?php if($this->isOrderCurrent('short_description')): ?> selected="selected"<?php endif; ?>>
FRAGRANCE
</option>
<option value="<?php echo $this->getOrderUrl('price', 'asc') ?>"<?php if($this->isOrderCurrent('price') && $this->getCurrentDirection() == 'asc'): ?> selected="selected"<?php endif; ?>>
PRICE (Low to High)
</option>
<option value="<?php echo $this->getOrderUrl('price', 'desc') ?>"<?php if($this->isOrderCurrent('price') && $this->getCurrentDirection() == 'desc'): ?> selected="selected"<?php endif; ?>>
PRICE (High to Low)
</option>
(我错误地使用了short_description属性而不是添加自定义香水属性)
现在,我需要的功能是,当使用其中的每一个时,例如按价格排序,我希望它按价格排序,它已经做了但后来被另一个自定义属性'range'排序。所以,如果它显示所有3英镑的产品,它会显示出每个范围聚集在一起的产品,而不是现在似乎随机的产品。
这是我上次发布的最后一个主要绊脚石,所以任何帮助都会受到高度赞赏。
我已经设法通过使用toolbar.php
中的以下行来制作道路if ($this->getCurrentOrder()) {
$this->_collection->setOrder(array($this->getCurrentOrder(), 'range'), $this->getCurrentDirection());
}
唯一的问题是它似乎首先按范围排序而不是说价格,即按价格排序的所有范围1,然后按价格排序。我在哪里需要按价格订购,价格的子订单
答案 0 :(得分:4)
当您在产品系列上调用setOrder()
时,它会检查给定属性是否为price
,如果是,则使用addAttributeToSort
。这是因为按价格排序需要一些比通用sortOrder
方法更具体的代码。
但是当您传递数组时,测试失败并使用公共代码,因此您可以尝试将两个setOrder()
调用分开:
if ($this->getCurrentOrder()) {
$this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
$this->_collection->setOrder('range', $this->getCurrentDirection());
}