Sortierung von Varianten (Optionen, API)

Hallo!

Ich war bisher noch nicht in der Lage eine eigene Sortierreihenfolge für Varianten zu übertragen und stoße daher das Thema erneut an.
Alle anderen Sachen klappen, nur die Sortierung bleibt ein Dorn im Auge. Folgendes Beispiel:

configuratorSet Inhalt des Vater-Artikels

array(1) {
  ["groups"]=>
  array(2) {
    [0]=>
    array(2) {
      ["name"]=>
      string(5) "DIN A"
      ["options"]=>
      array(2) {
        [0]=>
        array(3) {
          ["name"]=>
          string(6) "DIN A3"
          ["optionId"]=>
          int(110)
          ["position"]=>
          string(1) "4"
        }
        [1]=>
        array(2) {
          ["name"]=>
          string(6) "DIN A4"
          ["optionId"]=>
          int(113)
          ["position"]=>
          string(1) "3"
        }
      }
    }
    [1]=>
    array(2) {
      ["name"]=>
      string(5) "Farbe"
      ["options"]=>
      array(2) {
        [0]=>
        array(3) {
          ["name"]=>
          string(4) "Blau"
          ["optionId"]=>
          int(111)
          ["position"]=>
          string(1) "4"
        }
        [1]=>
        array(2) {
          ["name"]=>
          string(7) "Schwarz"
          ["optionId"]=>
          int(112)
          ["position"]=>
          string(1) "3"
        }
      }
    }
  }
}

Die Position wird in der Article API Ressource nur überschrieben, wenn keine gegeben ist (Zeile 997).
Was die eigentliche Problematik glaube ich ist, dass hier die API die einzelnen Optionen teils mehrfach durchläuft.

Beispiel: KindA ist DINA3 und Schwarz, KindB ist DINA4 und Schwarz.
Beide teilen sich die gleiche Option (da die Option einmalig ist inkl. ID) aber in unterschiedlichen Sets, es kann aber in der Konstellation nur eine Position geben.
Und zwar nur die Position der Option, aber nicht die Position der Option in einer Gruppe in einem Set - korrekt?
oder habe ich da etwas falsch verstanden? …

Schöne Grüße,
Niklas

Also, ich muss das Thema nochmal anstoßen.
Wir sind ja nicht allein, die eine Sortierung der Varianten per API nicht richtig lösen können:

https://forum.shopware.com/discussion/39657/api-configuratoroptions-sortierung-position-beeinflussen

https://forum.shopware.com/discussion/41935/sortierung-varianten

https://forum.shopware.com/discussion/35806/varianten-sortierung letzte Antwort

https://forum.shopware.com/discussion/29356/sortierung-von-varianten

Tickets existieren auch:

https://issues.shopware.com/issues/SW-14043

https://issues.shopware.com/issues/SW-11598

https://issues.shopware.com/issues/SW-11599

Mein erstes Ticket hat 8 Votes insgesamt, es gibt wohl Interesse daran.
Und es ist jetzt schon wieder fast ein Jahr alt …

Was ist zu tun, um Varianten per API richtig sortieren zu können?
Bisher war ja alles erfolglos, kommt entweder nicht an oder wird überschrieben.

Schöne Grüße,
Niklas

  • push -

Ich möchte das Thema noch einmal gerne aufleben lassen.
Es ist nach wie vor für uns ein “Problem”, dass die Varianten nicht so sortiert sind, wie wir sie Shopware per API übergeben.
Shopware handhabt die Variantengruppen global, wir benötigen aber für eine Gruppe individuelle Optionssortierungen.

Wir nutzen sehr häufig die die Option “Ausführung” oder “Speicherinhalt” mit den unterschiedlichsten Optionen.
In unserer ERP ist das je Variantenartikel auch korrekt sortiert und wird auch so an Shopware weiter gegeben.
Nur würfelt Shopware die Optionen wieder durcheinander.

Gibt es hier nicht grundlegend eine Möglichkeit, die einzigartig zu gestalten?
Das wäre glaube ich nicht nur für uns sehr wünschenswert.
Ich möchte auch nicht jedes mal die Optionen im Backend sortieren, was bei teilweise bis zu 500 Varianten einfach nicht sinnvoll ist.

Denn es sieht einfach nicht schön aus, wie es dann im frontend aussieht:

Das musst du dir individuell umsetzen. Am besten kannst du dazu das neue Attributsystem nutzen und individuelle Sortierungen implementieren. Mit dem Standardumfang ohne individuelle Anpassungen geht das nur global für alle Artikel.

Alles klar, vielen Dank für deine Rückmeldung, endlich hat sich jemand mal zu dem Thema geäußert Grin
Wir werden uns dann entsprechend mit den Attributen beschäftigen.

Hat hierfür jemand bereits eine Lösung gefunden? Was genau wird denn mit Attributsystem gemeint? 

In Shopware können inzwischen an sehr vielen Stellen Freitextfelder definiert werden. Damit würde man eine Sortierung realisieren können.

Wenn jemand eine “fertige” Lösung hat, wäre ich auch daran interessiert.
Habe immer mal wieder mich mit dem Thema beschäftigt, aber bisher keine runde und in sich saubere Lösung gefunden.

Schöne Grüße,
Niklas

Das Sortieren der Variantenkonfigurations-Optionen per Drag & Drop über das Backend war für mich keine Lösung. Da durch einen Import dies bei allen Produkten manuell gemacht werden müsste. Das setzen der Spalte Position in der Datenbank ist auch keine Option, da dieses mal immer wieder gemacht werden müsste, sobald neue Varianten etc. angelegt werden. Denn wenn ich bereits 10 Varianten habe und 4-5 ergänze muss ich diese manuell sortieren und auch hier besteht dann eine Fehlerquelle.

Ich habe es jetzt so gelöst, dass ich im Frontend per Javascript die Optionen sortieren. Es gibt ein Plugin (http://store.shopware.com/dreisc01287/automatische-sortierung-der-varianten-numerisch.html?number=DREISC01287) welches das ganze per Shopware Controller macht. Ist wohl besser für Cache etc. Ist mir aber auf Dauer zu teuer für die “Schönheitskorrektur”. Und da die Dropdowns von Shopware eh via Javascript angefasst werden um ein Fancy-Select daraus zu machen ist es egal, ob es vorher sortiert wird.

 

Meine Lösung:

themes/THEMENAME/frontend/_public/src/js/jquery.variant-sort.js

var select = $(".product--details .configurator--form .select-field select");
var option = select.find("option");

select.html(option.sort(function (a, b) {
    var a = parseInt(a.text.match(/\d+/),10), b = parseInt(b.text.match(/\d+/),10);
    return a < b ? -1 : 1;
}));

 

themes/THEMENAME/Theme.php

    protected $javascript = [
        // Variant Sort
        'src/js/jquery.variant-sort.js'
    ];

vor der letzten } einfügen

Man legt sich eine Liste aller Varianten an und sortiert sie so, wie die Varaitnen im Shop angezeigt werden sollen.
Dann gibt man jeder Variante einen Wert und nutzt für den Import in den Shop configOptionPosition.
Zum Beispiel

Variantenname    Sortierungsnummer
34    1001
34-36    1020
35    1040
35-36    1060
35-37    1080
35-38    1100
35.5    1120
36    1140
36-38    1160
36-42    1180
36.5    1200
.
.
.
Die Sortierungsnummer können auch 5-stellig, oder 6-stellig sein (dann natürlich für alle Varianten), das muss jeder für sich entscheiden anhand der Variantenmöglichkeiten und wieviel Platz man zwischen den Sortierungsnummern lässt, um neu hinzugekommene Varianten entsprechend einsortieren zu können.

Wir haben das jetzt ganz frei gemacht.
In unserer ERP kann man pro Artikel die Varianten (als jedes Artikelkind in der Liste des Artikelvaters) sortieren, und nicht nur die Gruppen/Optionen einmalig.

Gelöst ist das per Freitextfeld - jede Variante bekommt jeweils die gewünschte Sortiernummer.
Die Sortiernummern lassen sich dementsprechend jederzeit einfach aktualisieren.
Anhand dieser Sortiernummern wird etwas gerechnet, um jeweils die Gruppen als auch Optionen passend zu sortieren.

Mit den Infos wird im Detail Controller (Enlight_Controller_Action_PostDispatch_Frontend_Detail) vor der Auslieferung das sConfigurator Array passend sortiert.
Das Prozedere erlaubt (jedenfalls bei uns) die sauberste und definitiv schnellste Sortierung der Varianten im Frontend.

Schöne Grüße,
Niklas

1 „Gefällt mir“