Программная сортировка продуктов страницы каталога по пользовательским атрибутам
Я нахожусь в процессе сортировки продуктов по атрибуту_сет_ид с помощью пользовательского модуля, который расширяет 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/
Есть ли другой способ использовать смешанные атрибуты в массиве коллекций? У меня такое чувство, будто я что-то просматриваю.
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;
}