Итак, если кому нужно, я вчера написал кусочек кода (пришлось разбить один sql скрипт на два), но теперь роботы идут в конце списка:
Код: Выделить всё
Заменить в page_header.php
код:
---
if (defined('SHOW_ONLINE'))
{
$user_forum_sql = ( !empty($forum_id) ) ? "AND s.session_page = " . intval($forum_id) : '';
$sql = "SELECT u.username, u.user_id, u.user_allow_viewonline, u.user_level, s.session_logged_in, s.session_ip, s.is_robot
FROM ".USERS_TABLE." u, ".SESSIONS_TABLE." s
WHERE u.user_id = s.session_user_id
AND s.session_time >= ".( time() - 300 ) . "
$user_forum_sql
ORDER BY u.username ASC, s.session_ip ASC";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain user/online information', '', __LINE__, __FILE__, $sql);
}
$userlist_ary = array();
$userlist_visible = array();
$prev_user_id = 0;
$prev_user_ip = $prev_session_ip = '';
$prev_is_robot = '';
while( $row = $db->sql_fetchrow($result) )
{
// User is logged in and therefor not a guest
if ( $row['session_logged_in'] )
{
// Skip multiple sessions for one user
if ( $row['user_id'] != $prev_user_id )
{
$style_color = '';
if ( $row['user_level'] == ADMIN )
{
$row['username'] = '<b>' . $row['username'] . '</b>';
$style_color = 'style="color:#FF0000"';
}
else if ( $row['user_level'] == MOD )
{
$row['username'] = '<b>' . $row['username'] . '</b>';
$style_color = 'style="color:#0000FF"';
}
if ( $row['user_allow_viewonline'] )
{
$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'>' . $row['username'] . '</a>';
$logged_visible_online++;
}
else
{
$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'><i>' . $row['username'] . '</i></a>';
$logged_hidden_online++;
}
if ( $row['user_allow_viewonline'] || $userdata['user_level'] == ADMIN )
{
$online_userlist .= ( $online_userlist != '' ) ? ', ' . $user_online_link : $user_online_link;
}
}
$prev_user_id = $row['user_id'];
}
else
{
// Skip multiple sessions for one user
if ( $row['session_ip'] != $prev_session_ip )
{
$guests_online++;
if (($row['is_robot'] != '0') && ($row['is_robot'] != $prev_is_robot))
{
$row['is_robot'] = '<span style="color:#c2c2c2">' . $row['is_robot'] . '</span>';
$online_userlist = $row['is_robot'] . (($online_userlist!='') ? ', ' : '') . $online_userlist;
}
}
}
$prev_is_robot = $row['is_robot'];
$prev_session_ip = $row['session_ip'];
}
---
на следующий код:
---
if (defined('SHOW_ONLINE'))
{
$user_forum_sql = ( !empty($forum_id) ) ? "AND s.session_page = " . intval($forum_id) : '';
$sql = "SELECT u.username, u.user_id, u.user_allow_viewonline, u.user_level
FROM ".USERS_TABLE." u, ".SESSIONS_TABLE." s
WHERE u.user_id = s.session_user_id
and u.user_id <> -1
and s.session_time >= ".( time() - 300 ) . "
$user_forum_sql
ORDER BY u.username ASC";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain user/online information', '', __LINE__, __FILE__, $sql);
}
$userlist_ary = array();
$userlist_visible = array();
$prev_user_id = 0;
$prev_user_ip = $prev_session_ip = '';
while( $row = $db->sql_fetchrow($result) )
{
// Skip multiple sessions for one user
if ( $row['user_id'] != $prev_user_id )
{
$style_color = '';
if ( $row['user_level'] == ADMIN )
{
$row['username'] = '<b>' . $row['username'] . '</b>';
$style_color = 'style="color:#FF0000"';
}
else if ( $row['user_level'] == MOD )
{
$row['username'] = '<b>' . $row['username'] . '</b>';
$style_color = 'style="color:#0000FF"';
}
if ( $row['user_allow_viewonline'] )
{
$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'>' . $row['username'] . '</a>';
$logged_visible_online++;
}
else
{
$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'><i>' . $row['username'] . '</i></a>';
$logged_hidden_online++;
}
if ( $row['user_allow_viewonline'] || $userdata['user_level'] == ADMIN )
{
$online_userlist .= ( $online_userlist != '' ) ? ', ' . $user_online_link : $user_online_link;
}
$prev_user_id = $row['user_id'];
}
}
$db->sql_freeresult($result);
$sql = "SELECT s.is_robot, s.session_ip
FROM ".SESSIONS_TABLE." s
WHERE s.session_user_id = -1
and s.session_time >= ".( time() - 300 ) . "
$user_forum_sql
ORDER BY s.is_robot ASC, s.session_ip ASC";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain guest/online information', '', __LINE__, __FILE__, $sql);
}
$prev_session_ip = '';
$prev_is_robot = '';
$rcount=0;
while( $row = $db->sql_fetchrow($result) )
{
// Skip multiple sessions for one user
if ( $row['session_ip'] != $prev_session_ip )
{
$guests_online++;
if ($row['is_robot'] != '0')
{
if ($row['is_robot'] != $prev_is_robot)
{
$row['is_robot'] = '<span style="color:#c2c2c2">' . $row['is_robot'] . '</span>';
$online_userlist .= (($online_userlist!='') ? ', ' : '') . $row['is_robot'];
$prev_is_robot = $row['is_robot'];
}
else
{
$rcount++;
}
}
}
$prev_session_ip = $row['session_ip'];
}
---
Добавлено спустя 2 минуты 24 секунды:
Правда, переменную $rcount я предполагаю еще использовать для подсчета роботов, чтобы отображалось не так:
..., Yahoo Slurp, Yahoo Slurp, Yahoo Slurp, Yahoo Slurp, ....
а так Yahoo Slurp (57)
