Oxid jquery ui sortable im backend

Moin,
ich habe mal eine relativ technische Frage bei der ich auf dem Schlauch stehe.

Ich möchte die Sortierung der Artikel Varianten im Backend erleichtern und habe dazu mit Jquery UI eine sortierbare Liste gebaut.

Ich habe um die Items einfach noch nen Table rumgewraped und diesen Code hinzugefügt:

  $(function() {
  function updateTable(e, ui) {
    var t = $(e.target).closest("table");
    $("tbody tr", t).each(function(i, el) {
      $(el).attr("id", "test_variant." + i);
      $(".sortcount", el).val(i + 10);
    });
  }
$('.sortwrap').sortable("refresh");
  $('.table-sortable tbody').sortable({
    handle: 'span',
    update: updateTable,
  });
  $( ".table-sortable tbody" ).disableSelection();
}); 

Im Foreach der Listitems habe ich dazu die Sort entfernt und dies hinzugefügt:
<input class="sortcount" id="sortcount[{$_cnt1}]" type="hidden" name="editval[[{$listitem->oxarticles__oxid->value}]][oxarticles__oxsort]" value="[{$_cnt1}]" [{$readonly}]>

Nun funktioniert das ganze prima bis zum speichern. Denn alle Einträge die gedragged wurden werden patu nicht gespeichert, lediglich die anderen die Infolge des “gedraggten” auch geupdated wurden werden richtig in die DB geschrieben. Hatte jemand schon mal ein ähnliches Problem und kann mir da einen Hint geben oder ist diese Idee überhaupt garnicht die beste da es schon etwas gibt…

Ich freue mich auf eure Hilfe und euren Input!

s1de

Die Shopversion EE 5.3 ist noch aktuell?

Was genau hast Du entfernt z.B. den Block admin_article_list_sorting? Befindest Dich im article_list.tpl?

Ich hoffe über eine Blocküberladung und nicht in der Core Datei. Die nächste Migration kommt bestimmt :wink:

Wahrscheinlich ist etwas rausgeflogen was für die Speicherung wichtig ist.

Moin Vielen Dank für deine Antwort!

Nein aktuell bin ich mit diesem Projekt auf einer 6.2 PE.

Ich bin aktuell in article_variant.tpl. Bitte nicht böse sein :wink: Ich löte aktuell auf den Core um per POC festzustellen ob mein Lösungansatz funktioniert. Wenn alles läuft baue ich dafür ein Modul. Ich lasse den Shop via Composer deployent weshalb der Ansatz sowieso in der Runtime nicht funktionieren würde.

Das nächste Update steht mit 6.3 sowieso unmittelbar davor ^-^

Würde ich jetzt nicht vermuten, da er wenn ich nichts dragge alles normal speichert (Ich gebe den Index als Value mit und überschreibe ihn per jquery) Wenn ich jedoch sortiere wird (nur) der Eintrag der die Position verändert hat nicht gespeichert. Jedoch die anderen schon die nur eine Veränderung des oxsorts per jquery mitbekommen haben.

Geändert habe ich diese Zeile in 199
<td class="[{$listclass}]"><input type="text" class="editinput" size="7" maxlength="[{$listitem->oxarticles__oxsort->fldmax_length}]" name="editval[[{$listitem->oxarticles__oxid->value}]][oxarticles__oxsort]" value="[{$listitem->oxarticles__oxsort->value}]" [{$readonly}]></td>

zu

<input class="sortcount" id="sortcount[{$_cnt1}]" type="hidden" name="editval[[{$listitem->oxarticles__oxid->value}]][oxarticles__oxsort]" value="[{$_cnt1}]" [{$readonly}]>

Ich habe auch mit einem Diff Tool verglichen was für unterschiede der Dom hat und es sind wirklich nur die oxsort values. Kann es sein, dass es irgendwas mit dem Frame zutun hat?

Okay Entwarnung.

Großes Sorry von mir!

Beim Html debuggen viel mir auf, dass während ich den neuen Table gesetzt habe dieser automatisch die Form von search über myedit2 zog.

Anscheinend war es ein Bug oder Glück das ohne Drag and Drop die Werte gespeichert wurden.

Jetzt habe ich den Table sauber geschlossen und es funktioniert prima.

Vielen dank an indianer3c für den Support und im Endeffekt auch mit dem richtigen Hinweis ;).

1 Like