Door Magento is in versie 1.9.3.X een wijziging doorgebracht in de manier waarop data van multiselect attributen wordt opgeslagen. De gegevens worden niet langer in de catalog_product_entity_varchar, maar in de catalog_product_entity_text tabel in de database opgeslagen. Een wijziging die ervoor kan zorgen dat deze attributen niet meer getoond worden in de filters op de website.
Found another ‘quality improvement’ in Magento 1.9.3.x today. Undocumented. #RealMagento If your layered nav doesn’t work; its probably this pic.twitter.com/ugv8juiNex
— Andrew Pemberton (@p3mbo) March 23, 2017
Ok, de mogelijke oorzaak van het probleem dat sommige filters niet getoond worden is duidelijk. Maar dan moet het nog wel opgelost worden. De filters willen we natuurlijk gewoon getoond hebben op de webshop. Om hiervoor te zorgen kan met een paar simpele database queries ervoor gezorgd worden dat de gegevens uit de tabellen worden overgezet naar de nieuwe juiste tabel:
INSERT INTO catalog_product_entity_text (entity_type_id, attribute_id, store_id, entity_id, `value`) SELECT v.entity_type_id, v.attribute_id, v.store_id, v.entity_id, v.`value` FROM catalog_product_entity_varchar AS v WHERE v.attribute_id IN (SELECT attribute_id FROM eav_attribute WHERE frontend_input = 'multiselect'); DELETE FROM catalog_product_entity_varchar WHERE attribute_id IN (SELECT attribute_id FROM eav_attribute WHERE frontend_input = 'multiselect'); INSERT INTO catalog_category_entity_text (entity_type_id, attribute_id, store_id, entity_id, `value`) SELECT v.entity_type_id, v.attribute_id, v.store_id, v.entity_id, v.`value` FROM catalog_category_entity_varchar AS v WHERE v.attribute_id IN (SELECT attribute_id FROM eav_attribute WHERE frontend_input = 'multiselect'); DELETE FROM catalog_category_entity_varchar WHERE attribute_id IN (SELECT attribute_id FROM eav_attribute WHERE frontend_input = 'multiselect');
De volgende stap is om in de backoffice van Magento onder catalogus -> attributen de attributen van het type multiselect te openen en opnieuw op te slaan. Zo zijn we verzekerd dat het attribuut goed is opgeslagen en verwijst naar de juiste tabel waar de gegevens zijn opgeslagen in de database van Magento.
Als laatste wordt onder systeem -> index management de verschillende indexeringen opnieuw gedraaid, zodat de gegevens vanuit de nieuwe tabel ook daadwerkelijk weer in de verschillende indexeringen opgeslagen zijn.
Deze stappen zullen resulteren dat de betreffende filters van het type multiselect weer zichtbaar zijn op de frontend van de webshop. Daarnaast zijn de gegevens ook in de nieuwe tabel opgeslagen en zal dit dus ook bij toekomstige updates correct blijven functioneren.