Имя
Сергей
Вот первопричина http://www.drupal.ru/node/10510. Отображает у кого сегодня день рождения, поле профиля отвечающее за день рождения храниться в переменной $profile_birthday.
Для отслеживания максимального нашествия используется drupal переменная user_online_max, т.е. она инициализируется при первом выводе блока и только с этого момента начнет отслеживать. Также добавил возможность ограничения показа новых пользователей, по дате регистрации (например не больше недели)
1 пользователь и 0 гостей.
Separator.
Приветствуем новых пользователей: maxim_beifert, Мари.
Рекорд одновременного пребывания 4, это было 30.12.2007 в 01:00.<?php
$new_user_days = 7; // Количество дней с момента регистрации, которые пользователь считается новичком
$max_users = 1000; // Максимальное количество отображаемых пользователей
$profile_birthday = 'profile_birthday'; // поле профиля отвечающего за дату рождения
$output = '';
// Количество online пользователей и гостей, список пользователей
$interval = time() - 900; // 900 - время в секундах для определения онлайн времени
$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 = db_num_rows($authenticated_users);
if ($anonymous_count == 1 && $authenticated_count == 1)
$output .= t('%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('%members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', '@count users'), '%visitors' => format_plural($anonymous_count, '1 guest', '@count guests')));
$output .= '<div id="my_block_users_online">'."\n";
if ($authenticated_count && $max_users) {
$items = array();
$mu = $max_users;
if ($mu-- && $account = db_fetch_object($authenticated_users)) {
$output .= theme('username', $account);
while ($mu-- && $account = db_fetch_object($authenticated_users)) {
$output .= ', '.theme('username', $account);
}
$output .= '.';
}
}
$output .= '</div>'."\n";
// Список новичков
$output .= '<div id="my_block_users_new">'."\n";
$new_user_result = db_query('
SELECT
u.uid,
u.name,
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_num_rows($new_user_result) > 1) {
$output .= 'Приветствуем новых пользователей: ';
} 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('m');
$the_day = date('d');
$currentdayline = 'a:3:{s:5:"month";s:'.($the_month > 9 ? 2 : 1).':"'.$the_month.'";s:3:"day";s:'.($the_day > 9 ? 2 : 1).':"'.$the_day.'"';
$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_num_rows($birthday_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 .= '.';
}
}
$output .= '</div>'."\n";
// Вывод блока
print $output;
?>
Comments
Супер!
Вот это действительно работа, заслуживающая похвалы!
Спасибо. Очень полезный сниппет, но есть одно "НО". У меня не работает тот самый отрезок, отвечающий за определение именинников. Подозреваю, что проблема в запросе к базе, т.к. "День рождения" (profile_user_born) у меня созданное дополнительное поле в профиле и по этому запросу не видно.
Собственно вот $profile_birthday = 'profile_user_born'; // поле профиля отвечающего за дату рождения
Как мне подскажите быть? Спасибо.
Post new comment