Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal 获取所有已登录的用户_Drupal - Fatal编程技术网

Drupal 获取所有已登录的用户

Drupal 获取所有已登录的用户,drupal,Drupal,我想有我自己的聊天室。(我不能使用聊天模块,因为我必须对其进行个性化设置。)我必须检索所有在线用户,但我看不到任何变量 我只能获取当前登录用户的名称,但无法获取其余登录用户的名称。您可以通过查询会话表获取所有登录用户的列表。我假设您使用的是Drupal 6 <?php $result = db_query('SELECT uid FROM {sessions} WHERE uid != 0'); $users = array(); while($user = db_fetch_array(

我想有我自己的聊天室。(我不能使用聊天模块,因为我必须对其进行个性化设置。)我必须检索所有在线用户,但我看不到任何变量


我只能获取当前登录用户的名称,但无法获取其余登录用户的名称。

您可以通过查询会话表获取所有登录用户的列表。我假设您使用的是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);
}
由于登录用户从不超时(您可以无限期地保持登录),因此排除在一段时间内(即可能一小时不活动)未访问站点的登录用户可能会很有用:

您可能还希望限制要返回的用户数。例如,您可能希望抓取(最多)访问该站点的最后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),则应使用变量_set()、变量_get()和变量_del(),使其持久化。

创建自己的聊天室可能需要大量工作。我建议您仔细查看聊天室模块。您可以使用其他模块自定义Drupal模块,以便它们适合您的需要。如果你问一个关于你需要对聊天模块进行哪些个性化设置的问题,这可能是一个更好的方法。谢谢你的回答。这看起来是可行的。我一完成我的另一个项目就去试试,并向你核实一下。再次感谢!没问题!正如Jeremy French所说,创建自己的聊天可能比使用现有的聊天模块并覆盖其挂钩和主题功能(如果这些模块编写得很好)更麻烦。我的代码是用于“谁在线”块的,该块显示登录用户,并集成到自定义模块包装器中,以显示在线用户的聊天状态。
$timestamp = time - 3600; // 3600s is one hour.
$result = db_query('SELECT uid FROM {sessions} WHERE uid != 0 AND timestamp >= %d', $timestamp);
$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);