階層化されたナビゲーションのテキスト属性
-
16-10-2019 - |
質問
レイヤードナビゲーションでテキスト属性を使用できるようにするにはどうすればよいですか?
管理者では、ドロップダウンまたは価格の種類ではない場合、属性をフィルター可能に設定することはできません。
これのフロントエンドの意味を心配することはできますが、これをテキストフィールドに開き、テキスト属性をフィルターのリストにロードできるようにするための最良のアプローチを知りたいと思います。
解決
参照 Mage_Catalog_Model_Resource_Eav_Attribute::isIndexable()
, 、EAV Indenserが使用して、特定の属性が層状ナビゲーションインデックスに含まれるかどうかを確認します。
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またはテキスト値を使用して逃げることができます。
それ以外の場合は、属性フィルターモデルを書き換えて、値を正しく処理するか、独自のカスタムフィルターモデルを実装する必要があります。
他のヒント
製品保存にオブザーバーを追加し、複数の選択を拡張して可能な新しい属性値を持つテキストフィールドを追加できるように、ユーザーが既存の属性値を選択するか、新しい属性値を追加できるようにすることができるはずです。保存時に属性値に追加されます。
所属していません magento.stackexchange