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?
War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top