我有這個Drupal網站,我想有我自己的聊天(不能使用聊天模塊,因爲我必須個性化它)。我必須檢索所有在線用戶,但是我看不到任何變量。獲取所有登錄用戶Drupal
我只能夠得到的當前登錄的用戶而不是其餘用戶登錄名。
我有這個Drupal網站,我想有我自己的聊天(不能使用聊天模塊,因爲我必須個性化它)。我必須檢索所有在線用戶,但是我看不到任何變量。獲取所有登錄用戶Drupal
我只能夠得到的當前登錄的用戶而不是其餘用戶登錄名。
您可以通過查詢會話表獲取所有登錄用戶的列表。我假設你正在使用的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中描述的用戶對象的數組。
如果您已經知道用戶對象的哪部分內容(例如,只是用戶標識和名稱),可以通過刪除while循環中的user_load()並向查詢中添加用戶表,因爲每個user_load()都會生成一個附加查詢。下面將讓你登錄用戶的ID和名稱的列表:
<?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);
順便說一句,如果你打算使用magic numbers(如$極限或者3600s),你應該使用variable_set(),variable_get()和variable_del()來使它們持久化。
感謝您的回覆。這看起來像會起作用。我會在完成我的其他項目後立即嘗試並檢查它。再次感謝! – Danica 2010-06-22 08:33:47
沒問題!就像Jeremy French說的那樣,創建自己的聊天可能比採用現有的聊天模塊之一更重要,並且重寫其掛鉤和主題功能(如果模塊寫得很好)。我的代碼是在「Who's Online」塊中顯示登錄用戶並將其集成到[RealChat](http://www.realchat.com/)的自定義模塊包裝中,以顯示在線用戶的聊天狀態。 – 2010-06-22 08:55:41
創建自己的聊天可能需要很多工作。我建議你仔細看看聊天室模塊。您可以使用其他模塊自定義Drupal模塊,以便它們滿足您的需求。如果您詢問有關您需要對聊天模塊進行特定個性化的問題,這可能是更好的方法。 – 2010-06-22 08:25:36