Использование для каталога индекса продукта eav для пользовательского атрибута и фильтра addAttributeToFilter
Я добавил атрибут:
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'show_in_subview', array(
'type' => 'varchar',
'label' => 'Show in Subview',
'input' => 'multiselect',
'backend' => 'eav/entity_attribute_backend_array',
'required' => 0,
'user_defined' => 0,
'visible' => 1,
'is_filterable' => 1,
'is_configurable' => 0,
'sort_order' => 14,
'source' => 'ho_subviews/attribute_source_subview',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'group' => 'General',
'used_in_product_listing' => true,
));
Как вы можете видеть, я использовал пользовательский источник для заполнения поля множественного выбора. Сохранение и загрузка значений работает как заклинание.
Фильтрацию коллекции можно выполнить с помощью: $сборе->addAttributeToFilter('show_in_subview', массив('finset'=> маг::приложение()->getStore()->getCurrentSubviewId()));
Проблема в том, что коллекция не использует индексы, так как тип столбца не задан (http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_find-in-set).
Я заметил, что при добавлении обычного поля с несколькими выборками запрос представляет собой объединение в таблице catalog_product_index_eav, которая использует индексы и, следовательно, будет более производительной.
Я не совсем уверен, где искать, чтобы также использовать эту таблицу. Я предполагаю, что за это отвечает серверный класс (это было единственное различие между раскрывающимся полем, созданным вручную, или приведенным выше). Так что eav/entity_attribute_backend_array не использует таблицу catalog_product_index_eav.
- Какой сервер по умолчанию используется для множественного выбора или его нет?
- Как я могу расширить eav/entity_attribute_backend_array, чтобы он использовал таблицу catalog_product_index_eav?
1 answers
В конце я использовал атрибут множественного выбора по умолчанию. С этим решением мы упускаем немного гибкости, но поскольку подвиды не меняются так часто, это не проблема.
- Атрибут по умолчанию использует индексы, что является быстрым
- Атрибут по умолчанию совместим с серверной частью SOLR