Вопрос

Я создал атрибут custom_stock_status в своем модуле с типом бэкэнда int 'и четырьмя параметрами в ресурсе.

array(
4 => 'In Stock',
3 => 'Soon',
2 => 'Out Of Stock',
1 => 'Discontinued',
);

Код, который я использую для создания этого атрибута:

class Jetkharid_Catalog_Model_Resource_Setup extends Mage_Eav_Model_Entity_Setup
{
  public function getDefaultEntities()
  {
    return array(
      'catalog_product'             => array(
        'entity_model'                   => 'catalog/product',
        'attribute_model'                => 'catalog/resource_eav_attribute',
        'table'                          => 'catalog/product',
        'additional_attribute_table'     => 'catalog/eav_attribute',
        'entity_attribute_collection'    => 'catalog/product_attribute_collection',
        'attributes'                     => array(
          'jetkharid_stock_status'             => array(
            'type'                       => 'int',
            'label'                      => 'Stock Status',
            'input'                      => 'select',
            'source'                     => 'jetkharid_catalog/product_attribute_source_stock_status',
            'required'                   => true,
            'is_configurable'            => false,
            'global'                     => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
            'group'                      => 'General Information',
            'searchable'                 => true,
            'used_in_product_listing'    => true,
            'user_defined'               => false,
            'default'                    => 4,
          ),
        ),
      ),
    );
  }
}

И это мой источник для этих параметров атрибута:

class Jetkharid_Catalog_Model_Product_Attribute_Source_Stock_Status extends Mage_Eav_Model_Entity_Attribute_Source_Abstract 
{
  public function getAllOptions()
  {
    if (!$this->_options) {
      $this->_options = array(
        array(
          'value' => 4,
          'label' => Mage::helper('jetkharid_catalog')->__('In Stock')
        ),
        array(
          'value' => 3,
          'label' => Mage::helper('jetkharid_catalog')->__('Soon'),
        ),
        array(
          'value' => 2,
          'label' => Mage::helper('jetkharid_catalog')->__('Out Of Stock'),
        ),
        array(
          'value' => 1,
          'label' => Mage::helper('jetkharid_catalog')->__('Discontinued'),
        )
      );
    }
    return $this->_options;
  }
}

Теперь я хочу сортировать свою коллекцию по этому атрибуту, но, кажется, не работает!

Как мне это сделать?!

Спасибо, парни.

Это было полезно?

Решение

Для пользовательских атрибутов источника вам необходимо реализовать метод addValueSortToCollection чтобы заставить это работать.
Этот метод вызывается в Mage_Catalog_Model_Resource_Product_Collection::addAttributeToSort
Посмотрите на этот код, в частности:

        $attrInstance = $this->getEntity()->getAttribute($attribute);
        if ($attrInstance && $attrInstance->usesSource()) {
            $attrInstance->getSource()
                ->addValueSortToCollection($this, $dir); 
            return $this;
        }

Используйте метод в этом классе в качестве примера Mage_Catalog_Model_Product_Status.
Это используется при сортировке продуктов по статусу.
Я знаю, что это долго, но я думаю, что вы можете использовать тот же код, что и в этом классе. (не уверен, хотя).

Другие советы

Перейти к атрибутам. Выберите свой атрибут для редактирования и установки Используется в списке продуктов да.

УведомлениеВы можете иметь проблему после добавления нового атрибута. Новые атрибуты значения по умолчанию не установлены на существующие продукты. Чтобы сделать это, перейдите в сетку продукта и в массовом действии выберите атрибуты обновления обновления и установите некоторую ценность вашего нового атрибута для всех продуктов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top