Программная сортировка продуктов страницы каталога по пользовательским атрибутам


Я нахожусь в процессе сортировки продуктов по атрибуту_сет_ид с помощью пользовательского модуля, который расширяет Mage_Catalog_Model_Config. Вот мой модуль Model/Catalog/Config.php

<?php

class Atwix_Tweaks_Model_Catalog_Config extends Mage_Catalog_Model_Config
{
    public function getAttributeUsedForSortByArray()
    {
        $options = array(
            'attribute_set_id' => Mage::getModel("eav/entity_attribute_set")
        );

        foreach ($this->getAttributesUsedForSortBy() as $attribute) {
            $options[$attribute->getAttributeCode()] = $attribute->getStoreLabel();
        }

        return $options;
    }
}

После сортировки по attribute_set_id я хочу отсортировать по названию продукта, поэтому я пытаюсь добавить это в массив:

        $options = array(
            'attribute_set_id' => Mage::getModel("eav/entity_attribute_set"),
            'name' => Mage::helper('catalog')->__('Name')
        );

Но страница каталога, похоже, не распознает второе поле. Я могу работать только в одном поле. Это основа моего расширения, и все настройки находятся в этот единственный файл. Это ссылка, на которой основано расширение: http://www.atwix.com/magento/custom-sorting-product-listing/

Есть ли другой способ использовать смешанные атрибуты в массиве коллекций? У меня такое чувство, будто я что-то просматриваю.

Author: sparecycle, 2015-02-05

1 answers

Вам нужно переписать метод Mage_Catalog_Model_Resource_Product_Collection::addAttributeToSort.
Добавьте свою собственную логику для attribute_set_id.
Что-то вроде этого:

public function addAttributeToSort($attribute, $dir = self::SORT_ORDER_ASC){
    if (Mage::app()->getStore()->getId() == Mage_Core_Model_App::ADMIN_STORE_ID)    
    {
        return parent::addAttributeToSort($attribute, $dir);
    }
    //sort normally
    parent::addAttributeToSort($attribute, $dir);
    //if sorting my attribute_set_id, sort by name also
    if ($attribute == 'attribute_set_id') {
         $this->addAttributeToSort('name', $dir);
    }
    return $this;

}
 3
Author: Marius, 2015-05-28 11:36:46