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

Add a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.