Текст атрибут в слоистой навигации
-
16-10-2019 - |
Вопрос
Как сделать текстовый атрибут доступным для слоистой навигации?
В администраторе невозможно установить атрибут для фильтрации, если он не является раскрыванием или типом цены.
Я могу беспокоиться о последствиях этого фронта, но хотел бы узнать лучший подход, чтобы открыть это в текстовые поля и позволить загрузку текстового атрибута с списком фильтров.
Решение
Ссылка Mage_Catalog_Model_Resource_Eav_Attribute::isIndexable()
, который используется индексером EAV, чтобы проверить, может ли определенный атрибут быть включен в слоистый индекс навигации.
public function isIndexable()
{
// exclude price attribute
if ($this->getAttributeCode() == 'price') {
return false;
}
if (!$this->getIsFilterableInSearch() && !$this->getIsVisibleInAdvancedSearch() && !$this->getIsFilterable()) {
return false;
}
$backendType = $this->getBackendType();
$frontendInput = $this->getFrontendInput();
if ($backendType == 'int' && $frontendInput == 'select') {
return true;
} else if ($backendType == 'varchar' && $frontendInput == 'multiselect') {
return true;
} else if ($backendType == 'decimal') {
return true;
}
return false;
}
Чтобы сделать другие типы ввода, индексируемые, вам необходимо переписать эту модель ресурса атрибута (или указать пользовательскую модель, которая относится к пользовательской модели ресурса в eav_attribute.attribute_model
свойство для вашего атрибута.
Причина, по которой индексатор EAV имеет это ограничение, заключается в том, что он только знает, как обрабатывать целочисленные значения. То же самое относится и к многоуровневой модели фильтра атрибутов навигации.
Если ваши значения подготовлены к целым числам, вы сможете сойти с рук с использованием значения Varchar или текста.
В противном случае вам придется переписать модель фильтра атрибутов, чтобы правильно обработать ваши значения или реализовать собственную модель пользовательского фильтра.
Другие советы
Должно быть возможно добавить наблюдатель в сохранение продукта, а затем расширить несколько выборов, чтобы добавить текстовое поле с возможным новым значением атрибута, чтобы пользователь мог либо выбрать существующее значение атрибута, либо добавить новое. И при сохранении добавляется значения атрибута.