Verwenden Sie für CATALOG_PRODUCT_INDEX_EAV für benutzerdefiniert
-
16-10-2019 - |
Frage
Ich habe ein Attribut hinzugefügt:
$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,
));
Wie Sie sehen, habe ich eine benutzerdefinierte Quelle verwendet, um das Feld Multi -Select -Feld zu füllen. Das Speichern und Laden der Werte funktioniert wie ein Zauber.
Filterung der Sammlung kann mit: $ collection-> addAttributoFilter ('show_in_subview', array ('fed' => mage :: app ()-> getStore ()-> getCurrentsuBview ()) durchgeführt werden;
Das Problem ist, dass die Sammlung keine Indizes verwendet, da der Spaltenentyp nicht festgelegt ist (http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_find-in-set).
Mir ist aufgefallen, dass beim Hinzufügen eines normalen Multi-Selekt-Feldes die Abfrage ein Join in der Tabelle Catalog_Product_index_eav ist, die Indizes verwendet und somit leistungsfähiger ist.
Ich bin mir nicht ganz sicher, wo ich diesen Tisch auch verwenden soll. Ich vermute, dass die Backend -Klasse dafür verantwortlich ist (das war der einzige Unterschied zwischen einem manuell erstellten Dropdown -Feld oder dem oben genannten). So verwendet EAV/Entity_attribute_Backend_Array die Tabelle Catalog_Product_index_eav nicht.
- Was ist das Standard -Backend, das für Multiselect verwendet wird, oder gibt es nicht?
- Wie kann ich EAV/Entity_attribute_backend_array erweitern, so dass die Tabelle catalog_product_index_eav verwendet wird?
Lösung
Am Ende habe ich ein Standard-Multi-Selekt-Attribut verwendet. Mit dieser Lösung vermissen wir ein bisschen Flexibilität, aber da die Unteransichten nicht ändern, ist dies kein Problem.
- Das Standardattribut verwendet Indizes, die schnell sind
- Das Standardattribut ist mit dem Solr -Backend kompatibel