Magento - 中学排序

时间:2012-07-15 12:53:04

标签: php magento

我已经查看了我发现的与排序相关的几个帖子,但没有提出所需的解决方案。

我目前正在使用以下代码对类别视图字段中的产品进行排序,以覆盖默认选项并按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,然后按价格排序。我在哪里需要按价格订购,价格的子订单

1 个答案:

答案 0 :(得分:4)

当您在产品系列上调用setOrder()时,它会检查给定属性是否为price,如果是,则使用addAttributeToSort。这是因为按价格排序需要一些比通用sortOrder方法更具体的代码。
但是当您传递数组时,测试失败并使用公共代码,因此您可以尝试将两个setOrder()调用分开:

if ($this->getCurrentOrder()) {
    $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
    $this->_collection->setOrder('range', $this->getCurrentDirection());
 }