我正在尝试更改我的产品的排序方式。
我想使用按选项排序的属性,而不是按名称排序,而是按“管理属性”中给出的位置排序。但只有当有一个位置时(当全部为 0 时,它应该按名称排序)。
为此,我需要知道在哪个文件中将排序应用于产品集合。我在 app\code\core\Mage\Catalog\Model\Config.php 和 app\code\core\Mage\Catalog\Block\Product\List.php 中进行了搜索,但都没有找到任何关于排序的信息。也许还有一些代码建议。
谷歌也没有帮助我解决这个问题,所以我在这里尝试一下。也许有人可以帮我解决这个问题。
谢谢
编辑:
作为示例,我们采用“颜色”属性,它是一个下拉属性。
“管理属性”中的表格如下所示:
Valuename | Position
========================
light blue | 1
blue | 2
dark blue | 3
light red | 4
red | 5
dark red | 6
在前端,我按属性“颜色”排序,我的产品将以这种方式列出:
blue
dark blue
dark red
light blue
light red
red
但我希望它像这样列出:
light blue
blue
dark blue
light red
red
dark red
编辑2:
public function getAllOptions($withEmpty = true, $defaultValues = false)
{
$storeId = $this->getAttribute()->getStoreId();
if (!is_array($this->_options)) {
$this->_options = array();
}
if (!is_array($this->_optionsDefault)) {
$this->_optionsDefault = array();
}
if (!isset($this->_options[$storeId])) {
$collection = Mage::getResourceModel('eav/entity_attribute_option_collection')
->setPositionOrder('asc')
->setAttributeFilter($this->getAttribute()->getId())
->setStoreFilter($this->getAttribute()->getStoreId())
->load();
$this->_options[$storeId] = $collection->toOptionArray();
$this->_optionsDefault[$storeId] = $collection->toOptionArray('default_value');
}
$options = ($defaultValues ? $this->_optionsDefault[$storeId] : $this->_options[$storeId]);
if ($withEmpty) {
array_unshift($options, array('label' => '', 'value' => ''));
}
return $options;
}