Кто сейчас на форуме - функция, показывающая присутствие гостей, зарегистрированных пользователей и роботов на сайте. оформлена в виде отдельной страницы и открывается путём клика на надпись "кто сейчас на сайте"внизу главной страницы форума.
- информация по испытаниям в работе:
- информация данного узла, похоже, нагружает сервер.
не соответствует. нагрузка не увеличилась. - идут ошибки и зависания при применении "вывода названий тем просмотра" в форумах.
ошибок нет, но вывод названий тем всё равно "плавает". то есть, то нет. вместо этого выводится название "главная страница". модификация недоработана.
находится по адресу
Код: Выделить всё
ваш форум/viewonline.php
как это выглядит на этом сайте (с доработками):
данная тема создана для публикации доработок, увеличивающих информативность страницы. обсуждение и решение проблем отдельных доработок будет вынесено в отдельные темы в форуме "Вопросы и Ответы".
я потестировал - работает. но на данную модификацию есть нарекания, поэтому в папке мода оставлено предупреждение


то есть модификация имеет проблемы и не рекомендуется устанавливать её на рабочий форум. добавлена правка кода от -Волк-.
я ещё "погоняю - посмотрю что и как. если у меня вылезут проблемы - напишу. обсуждение этой модификации здесь: https://phpbb-belk.ru/topic-in-who-is-online_t359.html
если вы решите её использовать - ставится она так:
Код: Выделить всё
$location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
после кода в этой строке
Код: Выделить всё
$forum_data[$forum_id]['forum_name']
вставить код
Код: Выделить всё
, $topic_data['topic_title']
Код: Выделить всё
$location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
Вставить перед найденным
Код: Выделить всё
preg_match('|t=([0-9]+)|', $row['session_page'], $on_page);
preg_match('|p=([0-9]+)|', $row['session_page'], $on_page_post);
if (!empty($on_page_post[1]))
{
$sql = 'SELECT topic_title FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE ." p WHERE t.topic_id = p.topic_id AND p.post_id = {$on_page_post[1]}";
}
if (!empty($on_page[1]))
{
$sql = 'SELECT topic_title FROM ' . TOPICS_TABLE . " WHERE topic_id = {$on_page[1]}";
}
$topic_result = $db->sql_query($sql);
$topic_data = $db->sql_fetchrow($topic_result);
Вставить после найденного
Код: Выделить всё
$location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . ((!empty($on_page[1])) ? '&t=' . $on_page[1] : '&p=' . $on_page_post[1]));
если вам и так не очень понятно, как делать правки - можете посмотреть как это должно выглядеть на чистом форуме (с правками мода):
Код: Выделить всё
case 'viewtopic':
preg_match('|t=([0-9]+)|', $row['session_page'], $on_page);
preg_match('|p=([0-9]+)|', $row['session_page'], $on_page_post);
if (!empty($on_page_post[1]))
{
$sql = 'SELECT topic_title FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE ." p WHERE t.topic_id = p.topic_id AND p.post_id = {$on_page_post[1]}";
}
if (!empty($on_page[1]))
{
$sql = 'SELECT topic_title FROM ' . TOPICS_TABLE . " WHERE topic_id = {$on_page[1]}";
}
$topic_result = $db->sql_query($sql);
$topic_data = $db->sql_fetchrow($topic_result);
$location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_data['topic_title']);
$location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . ((!empty($on_page[1])) ? '&t=' . $on_page[1] : '&p=' . $on_page_post[1]));
break;
Теперь надо сделать правки для вывода в языковых файлах:
Код: Выделить всё
'READING_TOPIC' => 'Reading topic in %s',
Заменить найденное на
Код: Выделить всё
'READING_TOPIC' => 'Reading topic «%2$s» in %1$s',
Код: Выделить всё
'READING_TOPIC' => 'Просмотр темы в форуме «%s»',
Заменить найденное на
Код: Выделить всё
'READING_TOPIC' => 'Просмотр темы «%2$s» в форуме «%1$s»',
официальная страница мода: http://bb3x.ru/mods/info/24
вот так:
обсуждение проблем доработки здесь: https://phpbb-belk.ru/avatar-in-who-is-online_t362.html
если понравилось - ставим:
Код: Выделить всё
include($phpbb_root_path . 'common.' . $phpEx);
Вставить после найденного
Код: Выделить всё
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
Код: Выделить всё
// Get user list
$sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_type, u.user_colour,
После кода
Код: Выделить всё
u.user_colour,
Вставить
Код: Выделить всё
u.user_avatar, u.user_avatar_type, u.user_avatar_width, u.user_avatar_height,
Код: Выделить всё
$template->assign_block_vars('user_row', array(
Вставить перед найденным
Код: Выделить всё
$avatar_max_dimensions = $avatar_width = $avatar_height = '';
if ( !empty($row['user_avatar']) )
{
$avatar_max_dimensions = 40; // here you can change the max-width you would like to have the avatars displayed, change to 0 to use default
if ( $avatar_max_dimensions )
{
if ( $row['user_avatar_width'] >= $row['user_avatar_height'] )
{
$avatar_width = ( $row['user_avatar_width'] > $avatar_max_dimensions ) ? $avatar_max_dimensions : $row['user_avatar_width'] ;
$avatar_height = ( $avatar_width == $avatar_max_dimensions ) ? round($avatar_max_dimensions / $row['user_avatar_width'] * $row['user_avatar_height']) : $row['user_avatar_height'] ;
}
else
{
$avatar_height = ( $row['user_avatar_height'] > $avatar_max_dimensions ) ? $avatar_max_dimensions : $row['user_avatar_height'] ;
$avatar_width = ( $avatar_height == $avatar_max_dimensions ) ? round($avatar_max_dimensions / $row['user_avatar_height'] * $row['user_avatar_width']) : $row['user_avatar_width'] ;
}
}
else
{
$avatar_height = $row['user_avatar_height'];
$avatar_width = $row['user_avatar_width'];
}
}
Код: Выделить всё
'USERNAME' => $row['username'],
Вставить после найденного
Код: Выделить всё
'ONLINE_AVATAR' => ( $row['user_avatar'] ) ? get_user_avatar($row['user_avatar'], $row['user_avatar_type'], $avatar_width, $avatar_height) : '',
правки для стиля prosilver:
Код: Выделить всё
<th class="name"><a href="{U_SORT_USERNAME}">{L_USERNAME}</a></th>
Вставить перед найденным
Код: Выделить всё
<th> </th>
Код: Выделить всё
<td>{user_row.USERNAME_FULL}<!-- IF user_row.USER_IP --> <span style="margin-left: 30px;">{L_IP}:
Вставить перед найденным
Код: Выделить всё
<td style="width:20px;"><!-- IF user_row.ONLINE_AVATAR -->{user_row.ONLINE_AVATAR}<!-- ENDIF --></td>
Код: Выделить всё
<tbody>
<tr class="bg1">
<td colspan="3">{L_NO_ONLINE_USERS}<!-- IF S_SWITCH_GUEST_DISPLAY --> • <a href="{U_SWITCH_GUEST_DISPLAY}">{L_SWITCH_GUEST_DISPLAY}</a><!-- ENDIF --></td>
в строке
Код: Выделить всё
colspan="3"
заменить 3 на 4.
правки для стиля subsilver2:
Код: Выделить всё
<th width="40%"><a href="{U_SORT_USERNAME}">{L_USERNAME}</a></th>
Вставить перед найденным
Код: Выделить всё
<th> </th>
Код: Выделить всё
<td class="row1"><p class="gen">{user_row.USERNAME_FULL}</p><!-- IF user_row.USER_IP --><p class="gensmall">{L_IP}:
Вставить перед найденным
Код: Выделить всё
<td class="row1"><!-- IF user_row.ONLINE_AVATAR -->{user_row.ONLINE_AVATAR}<!-- ENDIF --></td>
Код: Выделить всё
<td class="row1" colspan="3"><b class="gensmall">{L_LEGEND} :: {LEGEND}</b></td>
в строке
Код: Выделить всё
colspan="3"
заменить 3 на 4.
После правок очистить кэш и можно пользоваться.

обсуждение доработки здесь: https://phpbb-belk.ru/national-flags-in-who-is-online_t363.html
выглядеть будет примерно так:
если понравилось - давайте поставим:
Код: Выделить всё
include($phpbb_root_path . 'common.' . $phpEx);
Вставить после найденного
Код: Выделить всё
include($phpbb_root_path . 'includes/functions_flag.' . $phpEx);
Код: Выделить всё
// Get user list
$sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_type, u.user_colour,
после части строки
Код: Выделить всё
u.user_colour,
Вставить
Код: Выделить всё
u.user_flag,
Код: Выделить всё
$result = $db->sql_query($sql);
Вставить после найденного
Код: Выделить всё
$flag_count = 0;
Код: Выделить всё
$template->assign_block_vars('user_row', array(
Вставить перед найденным
Код: Выделить всё
//Begin: National_Flag
if ( !empty($row['user_flag']) )
{
$user_flag = get_user_flag($row['user_flag']);
++$flag_count;
}
else
{
$user_flag = '';
}
//End: National_Flag
Код: Выделить всё
'USERNAME' => $row['username'],
Вставить после найденного
Код: Выделить всё
'ONLINE_USER_FLAG' => ( $row['user_flag'] ) ? get_user_flag($row['user_flag']) : '',
Вывод флага в шаблоне viewonline_body.html можно сделать по аналогии
с выводом аватара в предыдущем посте о встраивании аватара, либо поставить как вам удобно.
код вывода:
Код: Выделить всё
<!-- IF user_row.ONLINE_USER_FLAG -->{user_row.ONLINE_USER_FLAG}<!-- ENDIF -->