カスタム属性とaddattributeTofilterにcatalog_product_index_eavを使用します
-
16-10-2019 - |
質問
属性を追加しました:
$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,
));
ご覧のとおり、マルチセレクトフィールドを埋めるためにカスタムソースを使用しました。値を保存してロードすると、魅力のように機能します。
コレクションのフィルタリングは、$ collection-> addattributetofilter( 'show_in_subview'、array( 'finset' => mage :: app() - > getStore() - > getCurrentSubvied()))を使用して実行できます。
問題は、列タイプが設定されていないため、コレクションがインデックスを使用しないことです(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テーブルを使用しません。
- マルチセレクトに使用されるデフォルトのバックエンドは何ですか?
- catalog_product_index_eavテーブルを使用して、eav/entity_attribute_backend_arrayを拡張するにはどうすればよいですか?
解決
最後に、デフォルトのマルチセレクト属性を使用しました。その解決策を使用すると、少し柔軟性がありませんが、サブビューはthátを変更しないため、問題はありません。
- デフォルトの属性はインデックスを使用しますが、これは高速です
- デフォルトの属性は、solrバックエンドと互換性があります
所属していません magento.stackexchange