Получить всех вошедших в систему пользователей в Drupal - PullRequest
3 голосов
/ 22 июня 2010

У меня есть этот веб-сайт Drupal, и я хочу иметь свой собственный чат (не могу использовать модуль чата, потому что я должен персонализировать его). Мне нужно найти всех онлайн-пользователей, но я не вижу никакой переменной для этого.

Я могу получить только имя зарегистрированного пользователя, но не всех пользователей, вошедших в систему.

1 Ответ

13 голосов
/ 22 июня 2010

Вы можете получить список всех зарегистрированных пользователей, запросив таблицу сессий.Я предполагаю, что вы используете Drupal 6.

<?php
$result = db_query('SELECT uid FROM {sessions} WHERE uid != 0');
$users = array();
while($user = db_fetch_array($result)) {
  $users[] = user_load($user);
}

Запрос исключает сеансы для uid = 0, так как это анонимные пользователи.$users - это массив пользовательских объектов, как описано в Drupal API Docs .

Вы можете оптимизировать это, если вы уже знаете, какую часть пользовательских объектов вы будете использовать (например, толькоидентификатор пользователя и имя), удалив user_load () в цикле while и добавив к запросу соединение с таблицей users, поскольку каждый user_load () выполняет один дополнительный запрос.Ниже приведен список идентификаторов и имен пользователей, вошедших в систему:

<?php
$result = db_query('SELECT u.uid, u.name FROM {sessions} s INNER JOIN {users} u ON u.uid = s.uid WHERE s.uid != 0');
$users = array();
while($users[] = db_fetch_array($result));

Поскольку вошедшие в систему пользователи никогда не останавливаются (вы можете оставаться в системе неограниченное время), может быть полезно исключить зарегистрированных пользователейкто не заходил на сайт какое-то время (например, час бездействия):

$timestamp = time - 3600; // 3600s is one hour.
$result = db_query('SELECT uid FROM {sessions} WHERE uid != 0 AND timestamp >= %d', $timestamp);

Возможно, вы также захотите ограничить количество возвращаемых пользователей.Например, может быть, вы хотите захватить - самое большее - 10 последних зарегистрированных пользователей, которые обращались к сайту:

$limit = 10; // Limit to the last 10 users.
$result = db_query_range('SELECT uid FROM {sessions} WHERE uid != 0 ORDER BY timestamp DESC', $timestamp, 0, $limit);

В качестве отступления, если вы собираетесь использовать магические числа (например, $ limit или 3600), вы должны сделать их постоянными, используя variable_set (), variable_get () и variable_del ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...