РЕШЕНИЕ! Пик посещаемости - как избавится от гостей

Главные вкладки

Аватар пользователя iNFerNo iNFerNo 6 мая 2011 в 0:11

почикал все что может гостей считать... а в пике посещаемости все равно авторизиров + гости считаются....

что ещее переделать?

<?php
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;
}
?>

Комментарии

Аватар пользователя fexmusicmutuz@gmail.com fexmusicmutuz@g... 6 мая 2011 в 8:23

<a href="mailto:andribas@drupal.org">andribas@drupal.org</a> wrote:
попробуйте из запроса timestamp выкинуть. DISTINCT считается не по полю, а по строке.

А откуда в запросе возьмутся гости?

Аватар пользователя fexmusicmutuz@gmail.com fexmusicmutuz@g... 6 мая 2011 в 8:22
 $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);
    }

В том случае если $umax['count'] будет больше $authenticated_count, то вы $umax не измените и в $umax['count'] будет значение возвращенное variable_get('user_online_max', array('count' => 0, 'date' => '0'));
Кстати, а что оно возвращает? Smile

P.S. Это что за модуль? Тоже интересно статистику собирать, для себя на будущее хочется выяснить.

Аватар пользователя fexmusicmutuz@gmail.com fexmusicmutuz@g... 6 мая 2011 в 10:04

<a href="mailto:andribas@drupal.org">andribas@drupal.org</a> wrote:
а почему Вы так уверены что это гости?

Где?

Вопрос автора топика - "как избавится от гостей"
Так вот в запросе гостей ну никак быть не может. Следовательно DISTINCT в данной проблеме не поможет.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 6 мая 2011 в 10:06

"<a href="mailto:fexmusicmutuz@gmail.com">fexmusicmutuz@gmail.com</a>" wrote:

Так вот в запросе гостей ну никак быть не может.

Откуда такая логика?
Запрос выгребает и гостей и авторизованных, если это не PressFlow

Аватар пользователя iNFerNo iNFerNo 6 мая 2011 в 11:13

Ложная тревога. Был второй блок с оригинальным кодом который и считал все по старому...

Код выше подсчитывает только залогиненных... вроде как.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 6 мая 2011 в 11:35

"<a href="mailto:fexmusicmutuz@gmail.com">fexmusicmutuz@gmail.com</a>" wrote:
У гостей uid может быть больше 0?

чорт. Аццкие широкие мониторы, слона то я и не приметил.

Но в некоторых случаях, особенно у инферны, вполне могут