Php Magento列表按属性排序按属性顺序排序而不是按值排序

Php Magento列表按属性排序按属性顺序排序而不是按值排序,php,magento,sorting,e-commerce,magento-1.7,Php,Magento,Sorting,E Commerce,Magento 1.7,我在magento中面临属性排序问题。我为一个产品创建了一个下拉属性,用于对类别列表进行排序。我遇到的问题是,排序是由值进行的,而不是由我给它们的顺序进行的 示例:我有属性颜色和选项: 1.红色 2.黑色 3.绿色的 当我选择按颜色排序时,顺序是黑、绿、红,但我需要它是红、黑、绿 我找到了一个理论上可以解决这个问题的补丁,但我不能让它工作。 我的magento版本是1.7.0.2 谢谢。该修补程序需要进行一些修改才能正常工作。但是,最好将代码放在不同类的模型重写中 对我有效的解决方案是重写Ma

我在magento中面临属性排序问题。我为一个产品创建了一个下拉属性,用于对类别列表进行排序。我遇到的问题是,排序是由值进行的,而不是由我给它们的顺序进行的

示例:我有属性颜色和选项: 1.红色
2.黑色
3.绿色的

当我选择按颜色排序时,顺序是黑、绿、红,但我需要它是红、黑、绿

我找到了一个理论上可以解决这个问题的补丁,但我不能让它工作。

我的magento版本是1.7.0.2


谢谢。

该修补程序需要进行一些修改才能正常工作。但是,最好将代码放在不同类的模型重写中

对我有效的解决方案是重写
Mage\u Eav\u Model\u Entity\u Attribute\u Source\u Table::addValueSortToCollection
,并在函数末尾添加以下代码:

        $attribute = $this->getAttribute();
        $order = $attribute->getAttributeCode();
        $dir = strtoupper($dir);
        $collection->getSelect()->reset(Zend_Db_Select::ORDER);
        $collection->getSelect()
            ->joinLeft('eav_attribute_option AS eao', "eao.option_id=IF({$order}_t2.value_id > 0, {$order}_t2.value, {$order}_t1.value)", array("sort_order" => 'eao.option_id'))
                ->order(new Zend_Db_Expr('eao.sort_order '.$dir));

必须注意,这将取代每个目录集合和每个属性的选项id排序的值排序,其源模型类是
eav/entity\u attribute\u source\u table

,谢谢,这非常有效。在表前缀的情况下,只有一个问题您应该对表使用Mage::getSingleton('core/resource')->getTableName('eav_属性_选项')。