Постоянно неправильное кол-во гостей и пользователей
Когда гостем кто-то один заходит, пишется что аж 8 гостей на сайте в данный момент. Сайт тестовый пока. Там не может быть такого кол-ва юзеров просто физически.
Или два админа вместо одного одновременно. Как такое вообще может быть:(
Что с этим делать? Как решить проблему?
Комментарии
Да, действительно, такая проблема имеется. Для меня решением стало создание своего блока:
$new_user_days = 7; // Количество дней с момента регистрации, которые пользователь считается новичком
$max_users = 50; // Максимальное количество отображаемых пользователей
$profile_birthday = 'profile_born'; // поле профиля отвечающего за дату рождения
$output = '';
// Count users active within the defined period.
$interval = time() - variable_get('user_block_seconds_online', 900);
// Perform database queries to gather online user lists. We use s.timestamp
// rather than u.access because it is much faster.
$anonymous_count = sess_count($interval);
$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;
$max_users = variable_get('user_block_max_list_count', 10);
$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++;
}
}
// Format the output with proper grammar.
if ($anonymous_count == 1 && $authenticated_count == 1) {
$output = t('There is currently %members and %visitors online.',
array('%members' => format_plural($authenticated_count, '1 user', 'count users'),
'%visitors' => format_plural($anonymous_count, '1 guest', 'count guests')));
}
else {
$output = t('There are currently %members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', 'count users'), '%visitors' => format_plural($anonymous_count, '1 guest', 'count guests')));
}
// Display a list of currently online users.
$max_users = variable_get('user_block_max_list_count', 10);
if ($authenticated_count && $max_users) {
$output .= theme('user_list', $items, t('Online users'));
}
// Список новичков
$output .= '<div id="my_block_users_new">'."\n";
$new_user_result = db_query('SELECT u.uid, u.name, u.created FROM {users} u WHERE u.status != 0 AND u.access != 0 AND u.uid != 1 AND u.created >= '.mktime(0, 0, 0, date('m'), date('d') - $new_user_days, date('Y')).' ORDER BY u.created DESC');
$mu = $max_users;
if ($mu-- && $account = db_fetch_object($new_user_result)) {
//if (db_result($new_user_result) > 1) {
if (mysqli_num_rows($new_user_result) > 1) {
$output .= 'Приветствуем новых пользователей: <br/>';
} else {
$output .= 'Приветствуем нового пользователя: ';
}
$output .= theme('username', $account);
while ($mu-- && $account = db_fetch_object($new_user_result)) {
$output .= ', '.theme('username', $account);
}
$output .= '.';
}
if ($new_user->uid && $new_user) {
}
$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 + $anonymous_count)) {
$umax['count'] = $authenticated_count + $anonymous_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";
// Список пользователей, празднующих сегодня день рождения
$output .= '<div id="my_block_users_birthday">'."\n";
$the_month = date('n');
$the_day = date('d');
$currentdayline = 'a:3:{s:3:"day";s:'.($the_day > 9 ? 2 : 1).':"'.$the_day.'";s:5:"month";s:'.($the_month > 9 ? 2 : 1).':"'.$the_month.'"';
$ifbirthday_users = db_query_range('SELECT DISTINCT pv.uid FROM {profile_values} pv INNER JOIN {profile_fields} pf ON pv.fid = pf.fid WHERE pf.name = "'.$profile_birthday.'" AND pv.value LIKE "%s%%"', $currentdayline,0,1);
$birthday_users = db_query('SELECT DISTINCT u.uid, u.name FROM {users} u INNER JOIN {profile_values} pv ON u.uid = pv.uid INNER JOIN {profile_fields} pf ON pv.fid = pf.fid WHERE pf.name = "'.$profile_birthday.'" AND pv.value LIKE "%s%%" ORDER BY u.uid DESC', $currentdayline);
$birthday_count = db_result($ifbirthday_users);
if ($birthday_count) {
$output .= 'Поздравляем с Днём рождения: ';
$mu = $max_users;
if ($mu-- && $account = db_fetch_object($birthday_users)) {
$output .= ''.theme('username', $account);
while ($mu-- && $account = db_fetch_object($birthday_users)) {
$output .= ', '.theme('username', $account);
}
$output .= '.';
}
}
// Вывод блока
print $output;
?>
P.S. Не забудьте установить формат ввода в "PHP code"
Я бы этот код вынес в отдельную функцию в своем модуле к примеру в hook_block или просто в функцию и вызывал бы просто ее из блока в формате php.
Бо не правильно селекты в БД и вообще большой код хранить в блоке.
Maslennikov Aleksey,спасибо за ответ. Сейчас попробую
glu2006, увы, модули пока писать не умею:(
Лучше потратить 2-3 часа и научиться правильно оформлять код для модулей, чем наставить костылей (это именно то что было предложено и никак иначе), забыть про него на пол года, потом когда не дай бог что-то произойдет потратить 2-3 дня на поиски этого костыля и устранение последствий его работы.
Я не говорю про этот конкретный случай а говорю о ситуации в общем. Это как примерно когда писать учишься
кривые палочки - крючечки, а ладно потом научусь ровно выводить. ггггг в итоге какой у человека почерк?
glu2006, полностью с Вами согласна. Просто сейчас поскорее нужно доделать проект и приступить к новому
Всякие крючки я записываю или запоминмаю и потом их исправляю
Со скриптами в Линуксе именно так и работаю, когда их пишу:)
А есть описание написания модулей. У меня кроме книги по 6 больше ничего нету и информации мало. К сожалению на данном портале в основном пинают в "Как ты не знаешь? Это же элементарно." Элементарно для Вас господа кто с эти сталкивался, а новички отдают по 3 дня чтобы раскопать информацию и понять как оно устроено. Давайте тогда хоть будем помогать друг другу советами.
Я лично мало представляю работу с hook как и автор темы. Поэтому хотелось бы получить примеры, если таковые возможно получить.
Я вообще учился писать модули для шестёрки, по книге по пятому друпалу. ИНФОРМАЦИИ ДОСТАТОЧНО, особенно если думать немного
Для того что-бы посмотреть как использовать хуки достаточно открыть практически любой сторонний модуль для друпала, там в 90% есть пример использования hook_menu, hook_nodeapi, hook_block, hook_form_alter и т.д.
Ну и API почитать.