Улучшение форума Drupal. Часть 1.

December 27th, 2007

Этим сообщением начинаю серию заметок об улучшениях встроенного форума.
Основной принцип, которому собираюсь следовать – “Никаких правок ядра”.
Все свои решения я буду внедрять на своем региональном сайте
www.livekuban.ru/forum

Предыстория:
Мой компаньон очень любит vbulletin и считает его эталоном форумов.
В связи с этим форум друпала вызвал у него категорическое отторжение.
А вариант установки модуля drupalvb вызвал отторжение у меня,
так как у меня нет никакого желания поддерживать в будущем двух монстров
вместо одного. Поэтому я пообещал компаньону, что доведу встроенный форум
до ума и бюллетень не потребуется.

Первая задача:
Блок “Кто на сайте”.
Я изменю блок существующий блок “Сейчас на сайте” и “Новые пользователи”
Он будет показывать информацию в таком виде:

Сейчас на сайте 3 пользователя и 4 гостя.
Username1, Username2, Username3
Приветствуем нового пользователя: Username4
Рекорд одновременного пребывания 42, это было 22.12.2007 в 22:46.
Сегодня отмечают день рождение: Username5

Для решения первой задачи необходим модуль Profile,
с помощью которого надо создать поле:

Заголовок – “Дата рождения” (опционально)
Машинное имя – profile_born (обязательно)
тип – дата (обязательно)

Создаём новый блок на странице блоков в админке, и вставляем туда код:

<?php
$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)
print  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
print 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')));
$max_users = 1000;
print "<div id=\"my_block_users_online\">\n";
if ($authenticated_count && $max_users) {
$items = array();
while ($max_users-- && $account = db_fetch_object($authenticated_users)) {
print theme('username', $account). ", ";
}
}
print "</div>\n";

print "<div id=\"my_block_users_new\">\n";
$new_user_result = db_query('SELECT uid, name, created as timestamp

FROM {users}

WHERE status != 0 AND access != 0

ORDER BY created DESC' LIMIT 1);
if ($new_user = db_fetch_object($new_user_result)) {
print "Приветствуем нового пользователя: ";
print theme('username', $new_user);
}
print "</div>\n";

print "<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);
}
print "Рекорд одновременного пребывания <strong>".$umax['count']."</strong>,

это было <span class=date>".format_date($umax['date'], 'custom', 'd.m.Y в H:i', NULL)."</span>.";
print "</div>\n";

print "<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_born" AND pv.value LIKE "%s%%"

ORDER BY u.uid DESC', $currentdayline);
$birthday_count = db_num_rows($birthday_users);
if ($birthday_count) {
print "Сегодня отмечают день рождение: ";
while ($account = db_fetch_object($birthday_users)) {
print theme('username', $account). ", ";
}
}
print "</div>\n";
?>

Комментирование закрыто.

 
О Сайте

Этот сайт я делал для себя и своих заказчиков, но затем решил описывать некоторые ньюансы своей работы и может быть это окажется кому-то полезным, а мне окажется полезным общение с единомышленниками веб-энтузиастами.

Администрирование
Ссылки:
пишите обменяемся.

Спамер, осторожно!