Text attribute in the layered navigation
Reference Mage_Catalog_Model_Resource_Eav_Attribute::isIndexable()
, which is used by the EAV indexer to check if a given attribute may be included in the layered navigation index.
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;
}
To make other input types indexable, you need to rewrite this attribute resource model (or specify a custom model that refers to a custom resource model in the eav_attribute.attribute_model
property for your attribute.
The reason why the EAV indexer has this limitation, is because it only knows how to process integer values. The same is true for the layered navigation attribute filter model.
If your values are castable to integers, you will be able to get away with using a varchar or text value.
Otherwise you will have to rewrite the attribute filter model to correctly process your values, or implement your own custom filter model.