Problembeschreibung

Bei einem Kundenprojekt zeigte sich in VirtueMart im Bereich Produktpflege beim Versuch Kategorien zuzuweisen eine abnormes Verhalten dieses Formularelementes. Üblicherweise wird man hier im VM-Backoffice für die Kategoriezuweisung eine einfach Multiselektliste vorfinden. Erst wenn man sehr viele Kategorien hat, was verständlicherweise nur bei weniges Shops überhaupt zutrifft, ändert sich der Typ dieses Formularelementes. Statt o.g. Multiselektliste wird es nun zu einem intelligenten Suchfeld. Der Grund warum diese von den Entwicklern so gehandhabt wird ist klar. Die Suche nach Katerorien soll im Backoffice schneller gehen. Bei vielen Kategorien, wäre die Multiselektliste einfach zu umfangreich und damit langsam.



Deshalb schaltet Virtuemart um. Ja, nur leider funktioniert dieser Type nicht korrekt, verhält sich falsch und es läßt sich schlichtweg damit nicht arbeiten. Vom Kunden wurde ich aufgefordert das Fehlverhalten zu korrigieren.

Vorgehensweisen bei der Korrektur

Richtig wäre es nun das Formularelement welches über die Bibliothek ps-product-category.php erzeugt wird (Methodenaufruf ps-product-category->list_all()) zu korrigieren. Das wäre etwas mühselig und da ich mich mit dem Kunden auf ein einfacheres Vorgehen verständigen konnte, wurde nachfolgend beschriebener einfacher Workaround durchgeführt.

Verantwortlich für die die Fallentscheidung, welches der beiden o.g. Formulerelementetype verwendet werden soll, ist das Script administrator/com_virtuemart/html/product.product_form.php. Hier wird in Zeile 259 (Virtuemart Version 1.1.9) ein IF-Abfrage durchgeführt auf die Anzahl der Categorien. Fix programmiert ist der Wert auf 200 - leider gibt es diesen Wert nicht Config-Parameter. Um nun zu vermeiden, dass Virtuemart o.g. Methode list_all() verwendet statt die Methode ps_html::selectList(), müssen wir also den Wert einfach nur hochsetzen, z.B. bei meinem Kunden auf 2000. Damit kommt VM kaum in die Gelegenheit die list_all() zu verwenden, welche das fehlerhafte Formularelement erzeugt.