12. April 2013
Shopware 4: Auf Alphabetische Sortierung von Varianten ändern (12.04.13)
Dieser Beitrag wurde 13993 mal angezeigt.
Hy,
ich habe mal das Smarty etwas erweitert um diese Funktion des Sortierens ins Smarty verwenden zu können.
Dazu erstellt ihr eine Datei Names :
modifier.sortby.php
im Ordner :
/engine/Library/Smarty/plugins/
Mit dem Datei-Inhalt:
<?php # # sorts an array of named arrays by the supplied fields # For Shopware 4 from : sven-goessling.de function array_sort_by_fields(&$data, $sortby){ static $sort_funcs = array(); if (empty($sort_funcs[$sortby])) { $code = "\$c=0;"; foreach (split(',', $sortby) as $key) { $d = '1'; if (substr($key, 0, 1) == '-') { $d = '-1'; $key = substr($key, 1); } if (substr($key, 0, 1) == '#') { $key = substr($key, 1); $code .= "if ( ( \$c = (\$a['$key'] - \$b['$key'])) != 0 ) return $d * \$c;\n"; } else { // $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return $d * \$c;\n"; $code .= "if ( \$a['$key'] > \$b['$key']) return $d * 1;\n"; $code .= "if ( \$a['$key'] < \$b['$key']) return $d * -1;\n"; } } $code .= 'return $c;'; $sort_func = $sort_funcs[$sortby] = create_function('$a, $b', $code); } else { $sort_func = $sort_funcs[$sortby]; } uasort($data, $sort_func); } # # Modifier: sortby - allows arrays of named arrays to be sorted by a given field # function smarty_modifier_sortby($arrData,$sortfields) { array_sort_by_fields($arrData,$sortfields); return $arrData; } //$smarty->register_modifier( "sortby", "smarty_modifier_sortby" ); ?>
Nun könnt ihr in Smarty mit sortby arbeiten.
Ich habe dies mal Anhand der Varianten-Auswahl eingebaut.
Datei :
/templates/_default/frontend/detail/config_step.tpl
Hier sucht ihr die Zeile:
{foreach from=$sConfigurator.values item=configValue name=option key=optionID}
und ändert diese in :
{foreach from=$sConfigurator.values|@sortby:"optionname" item=configValue name=option key=optionID}
Und schon werden die Varianten alphabetisch geordnet.
Viel Spass damit!
Für alle die dies hier nicht finden 😉 Im Shopware Forum habe ich diesen Beitrag ebenfalls gepostet.
13 Comments
Super!! Genau das, was ich gesucht habe! Funktioniert einwandfrei…
Danke!!
Wie muss ich das Script denn anpassen, wenn ich nach Preis sortieren will, also immer die günstigste Variante zuerst?
Hallo,
ich glaube das ist aktuell nur über ein Modul möglich, da im SmartyTemplate oder am Artikelobjekt nicht die Informationen wie Preise für die Varianten zur Verfügung stehen. Diese müsste man über ein Modul „nachreichen“ und an den Haupt- oder Repräsentanten Artikel hängen, dann könnte es möglich sein. Allerdings wird trotzdem immer der Hauptartikel als erster Artikel dargestellt, wenn man aus der Listenansicht kommt.
Allerdings kann man auch die Sortierung ändern. Dann sollte es auch gehen. Über die API kann man die Reihenfolge ja bei jedem einlesen beeinträchtigen.
Nummern sortiert er so:
7,5
7
8,5
8
9
sollte aber so sein:
7
7,5 (weil 7 1/2 größer als 7)
8
8,5
9
kannst du das bitte fixen?
Hallo,
versuch es mal mit 7.5 (dot) 😉 z.b. mit nem replace und zurück replacen 😉
Beste Grüße
Hallo,
super dein PlugIn – genau das suche ich schon lange.
Ich verwende es für die Ländersortierung (versch. Sprachen, alphabetisch ausgegeben)
Hier mein SW Forumsbeitrag dazu:
http://forum.shopware.com/post124999.html#p124999
Eine Frage.
Wir haben unsere Fellgrößen in Zoll, z.B. 6“, 10“, 12“, 14“, etc.
Die Sortierung gibt das so aus:
10“
12“
14“
.
.
.
6“
Ich denke, man müßte die einstellige Zahl so angeben: 06“.
Das sieht aber nicht gut aus.
Wie kann ich es schaffen, daß die einstellige Zahl trotzdem ganz oben steht?
Danke für Deine Hilfe.
Grüße,
Florian
P.S.: Übrigens, Diese Seite wird von meinem aktuellen BitDefender Virenprogramm als gefährlich eingestuft!!!
Hy,
man kann die Sortierung auch noch anpassen. Benötigt dafür aber PHP Kenntnisse. Dann parst man erst, ob die ersten Zeichen zahlen sind, trennt diese vom String und sortiert nach diesen. 😉
BitDefender gibt eine FalsePositiv Meldung. Ich habe mich schon X mal bei denen beschwert. Aber die nehmen einen anscheint nur aus der Liste wenn man sich Kostenpflichtig registriert. Die deklarieren den cgMiner als MiningMalware. Da dieser zu Anfangszeiten von Hackern benutzt wurde um im Hintergrund Bitcoins zu minen.
Bringt heute zu Tage gar nichts mehr, macht auch kein Hacker mehr, aber Bitdefender checkt es nicht, das man mit dem Ding normal arbeiten kann.
Hallo,
dein Modifier ist ja mittlerweile in SW integriert (Ver. 5).
Leider funktioniert er mit PHP7 nicht mehr, wegen der deprecated Tags „create_function“ und „split“.
Kannst du hier ein Update veröffentlichen, so daß der modifier auch unter PHP 7 läuft?
Wäre super……
Vielen Dank,
viele Grüße,
Florian
Moin,
eine Version für das aktuelle SW 5 wäre super, oder gibt’s dafür schon eine andere Lösung?
Gruß,
Kai
Hallo Kai,
das Script kann man für SW5 adoptieren. Das sollte soweit kein Problem sein.
Allerdings sollte man es ehr als Plugin schreiben. Damit man es über das Backend steuerbar machen kann.
Bzw. auch noch weitere Sortierungen hinzufügen kann.
Beste Grüße,
Moin Sven,
das hört sich gut an.
Kannst / würdest Du so etwas machen? Wenn ja, was würde das kosten?
Gruß,
Kai
Hi,
ich würde das ganze gerne in /details/tab/description.tpl nutzen um meine Eigenschaften alphabetisch zu sortieren.
Leider scheitere ich…
{foreach $sArticle.sProperties|@sortby:“name“ as $sProperty}
name ist eigentlich der Eigenschaftsname, welcher auch sortiert werden sollte.
Auf der Artikelseite spuckt er mir dann garkeine Eigenschaft aus…
Hättest du eine Idee, was das Problem sein könnte?
Hallo Philipp, es könnte sein, das die neue Funktion im Smarty nicht richtig registriert wurde.
Zudem solltest du sortby nicht direkt in der foreach anwenden. erstelle eine neue variable. (assign) per |var_dump kannst du dann vorher prüfen ob die Ausgabe richtig ist.
Beste Grüße