почикал все что может гостей считать... а в пике посещаемости все равно авторизиров + гости считаются....
что ещее переделать?
if (user_access('access content')) {
$new_user_days = 3; // Количество дней с момента регистрации, которые пользователь считается новичком
$max_users = 1000; // Максимальное количество отображаемых пользователей
$output = '';
$interval = time() - variable_get('user_block_seconds_online', 900);
$authenticated_users = db_query('SELECT DISTINCT u.uid, u.name, 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);
$authenticated_count = 0;
$items = array();
while ($account = db_fetch_object($authenticated_users)) {
if (!isset($items[$account->uid])) {
if ($max_users > 0) {
$items[$account->uid] = $account;
$max_users--;
}
$authenticated_count++;
}
}
if ($authenticated_count == 1) {
$output = t('There is currently %members', array('%members' => format_plural($authenticated_count, '1 user', 'count users')));
}
else {
$output = t('There are currently %members', array('%members' => format_plural($authenticated_count, '1 user', 'count users')));
}
// Display a list of currently online users.
$max_users = variable_get('user_block_max_list_count', 10);
if ($authenticated_count && $max_users) {
$output .= '<div id="my_block_users_online">'."\n";
$i = 0;
foreach ($items as $item) {
if ($i != 0) {$output .= ', ';}
$output .= theme('username', $item);
$i++;
}
$output .= '.';
$output .= '</div>'."\n";
}
// Максимальное нашествие online пользователей
$output .= '<div id="my_block_users_maximum">'."\n";
$umax = variable_get('user_online_max', array('count' => 0, 'date' => '0'));
if ($umax['count'] == 0 || $umax['count'] <= ($authenticated_count)) {
$umax['count'] = $authenticated_count;
$umax['date'] = time();
variable_set('user_online_max', $umax);
}
$output .= 'Пик посещаемости <strong>'.$umax['count'].'</strong>, это было <span class="date">'.format_date($umax['date'], 'custom', 'd.m.Y в H:i', NULL).'</span>.';
$output .= '</div>'."\n";
// Вывод блока
print $output;
}
?>
Комментарии
просто подпишусь)
попробуйте из запроса timestamp выкинуть. DISTINCT считается не по полю, а по строке.
А откуда в запросе возьмутся гости?
if ($umax['count'] == 0 || $umax['count'] <= ($authenticated_count)) {
$umax['count'] = $authenticated_count;
$umax['date'] = time();
variable_set('user_online_max', $umax);
}
В том случае если
$umax['count']
будет больше$authenticated_count
, то вы$umax
не измените и в$umax['count']
будет значение возвращенноеvariable_get('user_online_max', array('count' => 0, 'date' => '0'));
Кстати, а что оно возвращает?
P.S. Это что за модуль? Тоже интересно статистику собирать, для себя на будущее хочется выяснить.
а почему Вы так уверены что это гости?
Где?
Вопрос автора топика - "как избавится от гостей"
Так вот в запросе гостей ну никак быть не может. Следовательно DISTINCT в данной проблеме не поможет.
был гость стал залогиненым видимо 2 раза считает...
Откуда такая логика?
Запрос выгребает и гостей и авторизованных, если это не PressFlow
У гостей uid может быть больше 0?
Ложная тревога. Был второй блок с оригинальным кодом который и считал все по старому...
Код выше подсчитывает только залогиненных... вроде как.
чорт. Аццкие широкие мониторы, слона то я и не приметил.
Но в некоторых случаях, особенно у инферны, вполне могут