Shopware 5 Tipp: Prämienartikel / Geschenkartikel nach Mindestbestellwert sortieren (Smarty)

Werbung

Kürzlich musste ich für einen Kunden eine Sortierung der Prämienartikel / Geschenkartikel umsetzen. Die Frage war, ob als Plugin oder per Smarty. Wir haben uns für Smarty entschieden.

Getestet und umgesetzt auf Shopware 5.6.6.

Hier vorab die schnelle Smarty-Lösung (updatesicher) für die Sortierung nach available (Mindestbestellpreis):

Schritt 1:
Das Template /themes/Frontend/MeinTheme/frontend/checkout/premiums.tpl vererben. Mehr Infos dazu in den Shopware Docs.

Schritt 2:
Smarty-Modifier implementieren.

a) Neue PHP-Datei modifier.sort.php erstellen und in folgendes Verzeichnis kopieren/uploaden:

/themes/Frontend/MeinTheme/_private/smarty/modifier.sort.php

b) Inhalt der Datei Smarty-Datei. Zur Veranschaulichung habe ich hier "sprechende" Variablen verwendet. Die können selbstverständlich nach Bedarf umbenannt werden.

function smarty_modifier_sort($premiums_array, $filterwert) {

   foreach($premiums_array as $k => $v) {

      $sortiert_nach_filterwert[] = strtolower($v[$filterwert]);

   }

   asort($sortiert_nach_filterwert);

   foreach($sortiert_nach_filterwert as $k => $v) {

      $sortierter_premiums_array[] = $premiums_array[$k];

   }

   return $sortierter_premiums_array;

}

Schritt 3:
Zurück zur premiums.tpl-Datei.

Suchen nach

{foreach $sPremiums as $premium}

und ersetzen durch

{foreach $sPremiums|@sort:'available' as $premium}

Neu ist hier folgende Anweisung/Erweiterung:

  • |@sort greift auf die Sortierfunktion.
  • :'available' ist das Filterkriterium = Filterwert.

Wenn alle 3 Schritte korrekt umgesetzt wurden, funktioniert die Sortierung ab- oder aufsteigend. Achtung Caches leeren und vorher Backup anlegen.

Weitere Sortiermöglichkeiten

Das obige Beispiel sortiert nach available. Mögliche wäre auch nach price, articleID, startprice... eben alles was das Array hergibt. Dafür wird einfach

:'available'

durch

:'price'

oder

:'articleID'

oder

:'startprice'

ersetzt.

Die Funktion asort() innerhalb von smarty_modifier_sort() kann noch ausgetauscht, bzw. verändert werden. Anstatt asort() kann auch arsort() verwendet werden.

asort()
Sortiert ein assoziatives Array in aufsteigender Reihenfolge, entsprechend dem Wert.

arsort()
Sortiert ein assoziatives Array in absteigender Reihenfolge, entsprechend dem Wert.

krsort()
Sortiert ein Array nach Schlüsseln in umgekehrter Reihenfolge

Mehr Tipps und Infos zu Arrays finden sich hier: https://www.w3schools.com/php/func_array_arsort.asp oder https://www.php.net/manual/de/array.sorting.php

Hoffe, ich konnte mit dem schnellen und einfachen Tipp/Tutorial helfen.

Viel Erfolg.
Zladdy

UPDATE: Nach einigen Test hat beim Kunden krsort() am besten funktioniert.