Quick and dirty Lösung für "Mehrere Werte für ein Attribut"

Gerne.

1. Datei /vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/ArticleAttributeAjax.php
Bei Zeile 54 die SQL-Abfrage geändert in:
$sQAdd = " from {$sAttrViewName}";

Das führt schon einmal dazu, dass man in der linken Seite immer alle Attribute sieht, auch wenn man die schon ausgewählt hat. Man kann nun ein Attribut mehrfach nach rechts schieben.

ABER - Der Wert wurde nicht gespeichert, was daran lag, dass immer wieder die gleiche Zeile in der Datenbank überschrieben wurde. Das liegt daran, dass das SQL-Select nur nach einem Pärchen sucht (Artikel<–>Attribut), weil das Programm eben nicht davon ausgeht, dass das mehrfach vorkommt. Daher muss man das noch so abändern, dass er die OXID vom Datensatz aus der Tabelle oxobject2attribute nimmt.

Das geht so:

2. Datei /source/Application/views/admin/tpl/popups/article_attribute.tpl

Dort muss in Zeile 51 die Zeile:
$('attr_oxid').value = oParam._oData._3;
in
$('attr_oxid').value = oParam._oData._1;
geändert werden.

Dadurch wird die OXID statt OXATTRID geschrieben.

Nun muss aber auch noch die Abfrage geändert werden, damit der richtige Datensatz selektiert wird:

3. Datei /vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/ArticleAttributeAjax.php

Zeile 134:
Den Select ändern in:
$select = "select * from {$viewName} where {$viewName}.oxid= " . $database->quote($attributeId);

Das war’s.

Ab sofort kann man einem Attribut mehrere Werte zuweisen.

Ich hoffe, das hilft dem ein oder anderen.

Viele Grüße,

Thorsten

2 Likes