Who is online - nur Mitglieder einer bestimmten Rolle zählen
am 06.06.2009 - 10:12 Uhr in
Ich möchte den Block "Who is online" so anpassen, dass nur die Mitglieder einer bestimmten Rolle gezählt und angezeigt werden. Die Seite soll sowohl von Kunden, als auch einer kleinen Community benutzt werden. Eingeloggte Community-Mitglieder sollen dann die Anzahl und die Namen anderer eingeloggter Community-Mitglieder angezeigt bekommen. Aus dem Beitrag: http://www.drupalcenter.de/node/16112 habe ich die notwendige Funktion für meine template.php übernommen, um anonyme User und authentifizierte User zu zählen.
<?php
function count_online_users() {
// Count users active within the defined period.
$interval = time() - variable_get('user_block_seconds_online', 900);
// Perform database queries to gather online user lists. We use s.timestamp
// rather than u.access because it is much faster.
$result['anonymous_count'] = sess_count($interval);
$result['authenticated_count'] = db_result(db_query('SELECT DISTINCT u.uid, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= %d AND s.uid > 0 ORDER BY s.timestamp DESC', $interval));
return $result;
}
?>Das klappt soweit gut. Weiß jemand, wie ich die Abfrage der Datenbank auf eine bestimmte Rolle eingrenze?
Wie können die Namen dieser User dann ausgegeben werden?
Danke im Voraus für Eure Mühe!
Gruß,
Uwe
- Anmelden oder Registrieren um Kommentare zu schreiben

Du brauchst dafür die
am 06.06.2009 - 12:05 Uhr
Du brauchst dafür die RollenId, hier2
Dann sollte das zusammen klappen
<?php function count_online_users() {
// Count users active within the defined period.
$interval = time() - variable_get('user_block_seconds_online', 900);
// only count some roles
$rid = 2;
// Perform database queries to gather online user lists. We use s.timestamp
// rather than u.access because it is much faster.
$result['anonymous_count'] = sess_count($interval);
$result['authenticated_count'] = db_result(db_query('SELECT DISTINCT u.uid, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid INNER JOIN {users_roles} ur ON ur.uid = u.uid WHERE s.timestamp >= %d AND s.uid > 0 AND ur.rid = %d ORDER BY s.timestamp DESC', $interval, $rid));
return $result;
}?>
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.de
SirFiChi ist auch dein Halbgott.
Leider funktioniert es so nicht..
am 07.06.2009 - 13:06 Uhr
Vielen Dank für die Hilfe - aber leider funktioniert es so nicht. Es wird kein Wert angezeigt.
Allerdings scheint auch bei der von mir angegeben Variante ohne Beschränkung auf die Rollen-ID 2 der Wurm drin zu sein: die Anzahl der Authentifizierten User schwankt hin und wieder.
Weiß jemand vielleicht einen besseren Weg?