.1 Suche: Sortierte Onlinelisteoriginal Thema anzeigen
29.10.04, 14:39:07
René
29.10.04, 15:44:08
BugHunter2k
01.11.04, 08:40:49
René
01.11.04, 11:11:56
BugHunter2k
01.11.04, 14:16:26
mdg-webmaster
02.11.04, 11:20:19
Online geht immer noch nicht, aber Online-Today geht. :)
Folgendes steht in der index.php:
[PHP]#
#
### heute bereits Online
$today_online_list = '';
if (!empty($_config['INDEX_TODAY_ONLINE'])) {
$liste = array();
$result = $_db->query('SELECT u.`id`, u.`name`, g.`wio_color`
FROM `'.$_cfg['DB_PREFIX'].'user` AS u,
`'.$_cfg['DB_PREFIX'].'group` AS g
WHERE u.`last_action` > '.mktime(0, 0, 0, date('m'), date('d'), date('Y')).'
AND u.`group_id` = g.`id`
GROUP BY u.`id`');[/PHP]
und das sollte da stehen:
[PHP]#
#
### heute bereits Online
$today_online_list = '';
if (!empty($_config['INDEX_TODAY_ONLINE'])) {
$liste = array();
$result = $_db->query('SELECT u.`id`, u.`name`, g.`wio_color`
FROM `'.$_cfg['DB_PREFIX'].'user` AS u,
`'.$_cfg['DB_PREFIX'].'group` AS g
WHERE u.`last_action` > '.mktime(0, 0, 0, date('m'), date('d'), date('Y')).'
AND u.`group_id` = g.`id`
GROUP BY u.`id`
ORDER BY u.`name`');[/PHP]
Eine Zeile einfügen und das '); an die richtige Stelle verschieben.
---
Aber bei der Online-Liste breche ich mir immer noch die Finger! :(
Das hier z.B. bringt überhaupt nichts:
[php]#
#
### Online Liste
$online_list = '';
if (!empty($_config['INDEX_ONLINE'])) {
$liste = array();
$time = PMF_TIME-$_config['ONLINE_TIMEOUT'];
$online_users = 0;
$online_guests = $_online['guest'];
if (is_array($_online['member'])) {
asort( $_online['member'] );
foreach ($_online['member'] AS $id => $val) {
if ($_online['member'][$id]['last_action'] >= $time) {
$online_users++;
$liste[] = ''.(($val['wio_color']) ? ''.$val['name'].'' : $val['name']).'';
}
}
$online_list = (count($liste) > 0) ? implode(', ', $liste) : '';
}
}[/php]
René
02.11.04, 12:33:18
Aus
[php]
$online_list = (count($liste) > 0) ? implode(', ', $liste) : '';
[/php]
wird:
[php]
sort($liste);
$online_list = (count($liste) > 0) ? implode(', ', $liste) : '';
[/php]
Sortierreihenfolge ist:
! " # $ % & ' ( ) * + , - . / : ; < = > ? @
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[ \ ] ^ _ `
a b c d e f g h i j k l m n o p q r s t u v w x y z
{ | } ~ € § ´
Ä Ö Ü ä ö ü
[color=red]edit/[/color]
Bachte die maximale Array-Größe! Wenn die zu groß ist, muss Du manuell ein neues Array erstellen... Bei übertragen dann per Einzelfallvergleich eine Art Bubblesort durchführen.
the-tester
03.11.04, 10:25:23
René
03.11.04, 12:00:21
Wie gesagt, dann manuell bubble-sortieren!
Zwei Alternativen... Beide ungetestet!
Ewig langsam aber wirksam ist Bubblesort (schnellere Alternative folgt am Ende):
[php]
#
#
### Online Liste
$online_list = '';
if (!empty($_config['INDEX_ONLINE'])) {
$liste = array();
$listname = array();
$time = PMF_TIME-$_config['ONLINE_TIMEOUT'];
$online_users = 0;
$online_guests = $_online['guest'];
if (is_array($_online['member'])) {
foreach ($_online['member'] AS $id => $val) {
if ($_online['member'][$id]['last_action'] >= $time) {
$online_users++;
$liste[] = ''.(($val['wio_color']) ? ''.$val['name'].'' : $val['name']).'';
$listname[] = $val['name'];
}
}
for ($bubble_i=1; $bubble_i<=$online_users-1; $bubble_i++) {
for ($bubble_j=1; $bubble_j<=$online_users-1-$bubble_i; $bubble_j++) {
if ($listname[$bubble_j+1] < $listname[$bubble_j]) {
$bubble_name = $listname[$bubble_j];
$bubble = $liste[$bubble_j];
$listname[$bubble_j] = $listname[$bubble_j+1];
$liste[$bubble_j] = $liste[$bubble_j+1];
$listname[$bubble_j+1] = $bubble_name;
$liste[$bubble_j+1] = $bubble;
}
}
}
$online_list = (count($liste) > 0) ? implode(', ', $liste) : '';
}
}
[/php]
Oder Du machst es mit einem tmp. Array:
[php]
#
#
### Online Liste
$online_list = '';
if (!empty($_config['INDEX_ONLINE'])) {
$liste = array();
$tmpliste = array();
$time = PMF_TIME-$_config['ONLINE_TIMEOUT'];
$online_users = 0;
$online_guests = $_online['guest'];
if (is_array($_online['member'])) {
foreach ($_online['member'] AS $id => $val) {
if ($_online['member'][$id]['last_action'] >= $time) {
$online_users++;
$tmpliste[$val['name']] = ''.(($val['wio_color']) ? ''.$val['name'].'' : $val['name']).'';
}
}
#tmp. Liste nach Schlüssel - also Namen - sortiern:
ksort($tmpliste);
#und die Liste erstellen:
$tmpliste=array_values($tmpliste);
$lstelmnt=1;
while ($lstelmnt<=$online_users) {
$liste[$lstelmnt]=$tmpliste[$lstelmnt-1];
$lstelmnt++;
}
$online_list = (count($liste) > 0) ? implode(', ', $liste) : '';
}
}
[/php]
[color=red]edit/[/color]
Man (nicht ich) müsste dich aber noch überlegen, ob man nicht die Namen im Array-Key mittels strtoupper() groß macht, damit die Sortierung auch wirklich stimmt... Denn so werden die drei User "tester klein", "The-Tester" und "Tester groß" wie folgt sortiert: "Tester groß", "The-Tester", "tester klein".
strtoupper() liefert da: "Tester groß", "tester klein", The-Tester".
the-tester
04.11.04, 10:16:46
René
04.11.04, 10:43:59
the-tester
04.11.04, 12:50:05
René
04.11.04, 14:58:28
mdg-webmaster
04.11.04, 15:16:33
Da ist alle kompakt: http://www.your-pmf.de/topic.php?id=484&
*themaschließ*
:closed:
the-tester
|