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

Hallo zusammen,

ich benötige die Möglichkeit einem Attribut mehrere Werte zuzuweisen. Dafür gibt es Plugins - ja - aber ich hätte lieber eine ganz einfache pragmatische Lösung.

Mein bisheriger Ansatz:

  1. Ich weise dem Attribut im Admin-Bereich (Artikel -> Auswahl -> Attribute zuweisen -> Attribut nach rechts ziehen -> Wert eintippen) einen Wert zu
  2. In der db wird ein Eintrag in der Tabelle oxobject2attribute erzeugt
  3. Ich kopiere diese Zeile direkt in der db und ändere nur die OXID um einen Wert
  4. Im Admin-Bereich (Artikel -> Auswahl -> Attribute zuweisen) sehe ich nun im rechten Bereich zweimal mein Attribut und kann es dort pflegen
  5. Im Frontend verhält sich alles genau so wie es soll. Beide Werte tauchen im Dropdown des Filters auf und bei beiden Werten wird mein Produkt angezeigt.
  6. Auch im Backend ist alles fehlerfrei. Ich kann die doppelten Attribute einzeln nach links ziehen -> Zeile wird aus der db gelöscht.

Kann mir einer von den Entwicklern mal auf die Sprünge helfen, welche Code-Zeile geändert werden muss, damit man direkt im Admin das Attribut einfach mehrfach nach rechts ziehen kann? Meiner Logik nach, verschwindet das Attribut ja, weil es bereits in Gebrauch ist. Das kann ja nur eine Zeile Code sein, wo eben das geprüft wird (Attribut bereits aktiv? Nicht mehr anzeigen).

Ich würde das gerne quick-and-dirty auskommentieren oder halt abändern. Ich finde es nur partout nicht.

Danke und viele Grüße,

Thorsten

Hi @twaldorf ,
schau dir mal diese Datei hier an: application/controllers/admin/article_attribute_ajax.php

Hallo Zar,

was ist das Pendant zu dieser Datei in CE 6? Dort gibt es die Datei nämlich nicht. :sleepy:

Viele Grüße,

Thorsten

Application/Controller/Admin/ArticleAttributeAjax.php

1 Like

Perfekt. Danke für den Hinweis.

Hab die SQL-Abfrage geändert und schon klappt es wie gewünscht.

Vielleicht kannst für die Nachwelt hinterlassen, was Du gemacht hast :wink:.

1 Like

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

Hi,

hier noch ein anderer Ansatz:
In das folgende Modul (für OXID6) habe ich ein hidden-Feature eingebaut, um einem Attribut mehrere Werte zuweisen zu können.

So funktioniert es:

  1. Das Feld “Wert” muss zunächst leer sein (ggf. leeren und speichern).
  2. Dann die Werte getrennt durch “|” eintragen, zB. blau|rot und speichern.

Im Attributfilter kann dann nach beiden Werten gefiltert werden.

Hallo,

ist Dein Modul denn auch unter der CE 6.0 lauffähig? Angegeben ist die Kompatibilität nur bis zur 4.9.

Viele Grüße,

Thorsten

Hm also wenn ich bei github richtig lese ist das Modul für OXID 6 …

1 Like

Ja, richtig. Ich hatte das Modul gegoogelt um zu schauen, was es eigentlich alles macht und im eXchange ist es nur bis zur 4.9 als kompatibel angegeben:
https://exchange.oxid-esales.com/de/tag/backend/jxAttrEdit-0-2-Stable-CE-4-7-x.html

Hab auf das Modul umgeschwenkt. Wesentlich komfortabler als die quick-and-dirty-Lösung.