Okay, dann müssen wir das StdClass Object aufbrechen. Ich habe das ganze mit einem UDT getestet und es funktioniert bei mir. (Lieber UDT, da dies keine Datei irgendwo in den Tiefen des Standards ist, welche ich sonst nicht zur Verfügung habe.
Menütemplate:
Code: Select all
{sortArray nodelist=$nodelist sort="-id" assign="newnodelist"}
{foreach from=$nodelist item=node}
<h1> {$cgsimple->get_page_title($node->alias)} </h1>
<p> {$cgsimple->get_page_content($node->alias)} </p>
{/foreach}
Folgenden UDT habe ich erstellt "sortArray":
Code: Select all
global $gCms;
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 .= 'return $c;';
$sort_func = $sort_funcs[$sortby] = create_function('$a, $b', $code);
}
else
{
$sort_func = $sort_funcs[$sortby];
}
uasort($data, $sort_func);
}
if (!isset($params['nodelist'])) {
echo "UDT-feuShowMenu - Nodeliste des Menüs fehlt!";
return;
}
// Schreiben welche Seiten sichtbar sind
$modnodelist = array();
foreach($params['nodelist'] as $node) {
$array = array();
foreach($node as $key => $value) {
$array[$key] = $value;
}
$modnodelist[] = $array;
}
//print_r($modnodelist);
array_sort_by_fields($modnodelist, $params['sort']);
// Assign des Rückgabewertes
if(isset($params['assign']))
$smarty->assign(trim($params['assign']), $modnodelist );
else
return $modnodelist;
Möglicherweise geht dies auch mit dem Modifier von vorher:
Code: Select all
function smarty_modifier_sortby($arrData,$sortfields) {
$modnodelist = array();
foreach($arrData as $node) {
$array = array();
foreach($node as $key => $value) {
$array[$key] = $value;
}
$modnodelist[] = $array;
}
array_sort_by_fields($modnodelist,$sortfields);
return $modnodelist;
}