Magento 1.9 addattributetofilter: Vergleichen Sie als Zahlen anstelle von Saiten
-
13-12-2019 - |
Frage
Ich habe in Magento-Backend ein eigenes Produktattribut "Heights" erstellt. Der Eingangstyp ist "Text" (da kein ähnlicher Typ "Float" ist). Um dieses Attribut als Filter zu verwenden, schrieb ich eine kleine Erweiterung. In dieser Erweiterung filtere ich die Produkte mit
generasacodicetagpre.Wenn eine Produkthöhe 69 cm (69,00) ist und der Filter "<= 80 cm" (LTEQ 80.00) ist, funktioniert der Filter in Ordnung. Es funktioniert jedoch nicht, wenn der Filter "<= 100 cm" ist (LTEQ 100.00). Dies liegt daran, dass Magento das Höhenattribut als varchar erstellt hat, und somit die Funktion AddatTributetoFilter ein Zeichenfolge-Vergleich erstellt. In String-Compare ist "69" größer als "100", da "6" größer als "1" ist.
(ich weiß, dass der beste Weg wäre, das Attribut zu löschen und eine neue mit Typ "Float" über die Erweiterung erstellen. Der Shop ist jedoch fast fertig und enthält bereits Produkte, sodass ich vermeiden möchte, dass ich solche "großen" Änderungen meiden möchte in diesem Zustand.)
Lösung
Der Kommentar von Prateek mit dem TextPart
Es wird ein MySQL-Vergleich sein, nicht PHP
habe mich zu einer Lösung geführt, ohne den Feldtyp zu ändern.Ich habe meinen Code für mage_catalog_block_product_list in der Funktion _getproductCollection in:
geändert generasacodicetagpre.Natürlich habe ich den Code im Kern nicht geändert.Ich habe die Funktion in meiner Erweiterung überschrieben.Aufgrund des Typscast werden die Werte als Zahlen anstelle von Zeichenfolgen verglichen. Es ist nicht die sauberste Lösung, aber für mich in Ordnung für mich.