Torres |
08-01-2010 09:20 PM |
Sort Users Online statistics
I'm not sure why I can't sort in the Statistics -> Users Online screen, but it was driving me crazy each time I used it. In anycase, this is what I did to sort it by "Last Entry" Date:
Create a new file called modifier.sortby.php with the following code, and place it in your \include\lib\smarty\plugins\ folder.
PHP Code:
<?php # # sorts an array of named arrays by the supplied fields # code by dholmes at jccc d0t net # taken from http://au.php.net/function.uasort # modified by cablehead, messju and pscs at http://www.phpinsider.com/smarty-forum
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); }
# # 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" ); ?>
Next, locate the following line in \skin1\modules\Users_online\stats.tpl:
PHP Code:
{foreach from=$statistics item=v}
Change it to this:
PHP Code:
{foreach from=$statistics|@sortby:"-current_date" item=v}
That's it. This will sort the "Users online" by last entry date in descending order. If you want it in ascending order, just remove the minus sign or replace it with a # sign. You can sort by multiple fields by separating them with a comma.
|