Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[3.3] Счётчик сообщений в определённых форумах (в дополнение к обычному)

У вас есть идея для расширения функциональности phpBB? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Ignis
phpBB 1.2.0
Сообщения: 12
Стаж: 1 год
Благодарил (а): 14 раз

[3.3] Счётчик сообщений в определённых форумах (в дополнение к обычному)

Сообщение Ignis »

Доброго времени, хотелось бы добавить на форум (3.3) ещё один счётчик сообщений пользователя, в дополнение к стандартному пхпббшному.
Так, чтобы стандартный подсчитывал вообще все сообщения пользователя, а кастомный — только в определённых форумах или категории.

Готового решения я не нашла, поэтому буду благодарна, если вдруг найдётся расширение с похожим функционалом или соответствующий код.
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3336
Стаж: 15 лет 1 месяц
Благодарил (а): 25 раз
Поблагодарили: 590 раз

Re: [3.3] Счётчик сообщений в определённых форумах (в дополнение к обычному)

Сообщение Nekstati »

Ignis, примерно так
 
PHP

Код: Выделить всё

function display_user_activity_in_certain_forum($user_id = 0, $forum_ids = [])
{
	global $template, $db, $user, $phpbb_root_path, $phpbb_container;

	$sql = "
		SELECT *
		FROM " . USERS_TABLE . "
		WHERE user_id = $user_id";
	$result = $db->sql_query($sql);
	$userdata = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);

	if (empty($userdata))
		return;

	$forums = [];
	$sql = '
		SELECT forum_id, COUNT(post_id) AS num_posts
		FROM ' . POSTS_TABLE . '
		WHERE poster_id = ' . $userdata['user_id'] . '
			AND post_postcount = 1
			AND ' . $db->sql_in_set('forum_id', $forum_ids) . '
			AND ' . $phpbb_container->get('content.visibility')->get_forums_visibility_sql('post', $forum_ids) . '
		GROUP BY forum_id
		ORDER BY num_posts DESC';
	$result = $db->sql_query($sql);
	$forums = array_column($db->sql_fetchrowset($result), null, 'forum_id');
	$db->sql_freeresult($result);

	if (empty($forums))
		return;

	$sql = '
		SELECT forum_id, forum_name
		FROM ' . FORUMS_TABLE . '
		WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
	$result = $db->sql_query($sql, 3600);
	while ($row = $db->sql_fetchrow($result))
		$forums[$row['forum_id']]['forum_name'] = $row['forum_name'];
	$db->sql_freeresult($result);

	$data = [];
	foreach ($forums as $id => $f) {
		$percent = ($userdata['user_posts']) ? ($f['num_posts'] / $userdata['user_posts']) * 100 : 0;
		$l_percent = ($userdata['user_id'] != ANONYMOUS && $userdata['user_id'] == $user->data['user_id']) ? $user->lang['POST_PCT_ACTIVE_OWN'] : $user->lang['POST_PCT_ACTIVE'];
		$data[] = [
			'FORUM_NAME'	=> $f['forum_name'],
			'FORUM_URL'		=> append_sid("{$phpbb_root_path}viewforum.php", 'f=' . $id),
			'POSTS'			=> $user->lang('USER_POSTS', (int) ($f['num_posts'] ?? 0)),
			'PERCENT'		=> sprintf($l_percent, $percent),
		];
	}

	$template->assign_var('USER_ACTIVITY_FORUMS', $data);
}

display_user_activity_in_certain_forum($user_id, /* forum_ids */ [2, 3]);
В последней строчке указываем user_id (число) и forum_ids (массив)
 
HTML

Код: Выделить всё

<dl class="details">
	{% for f in USER_ACTIVITY_FORUMS %}
		<dt>{{ loop.index == 1 ? 'Активность пользователя в специальных форумах:' : '&nbsp;' }}</dt>
		<dd><strong><a href="{f.FORUM_URL}">{f.FORUM_NAME}</a></strong><br />({f.POSTS} / {f.PERCENT})</dd>
	{% endfor %}
</dl>
 
Первое можно вставить, например, в memberlist.php после display_user_activity($member);
Второе - в styles\prosilver\template\memberlist_view.html после <h3>{L_USER_FORUM}</h3>
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
angst66
phpBB 3.0.0 RC1
Сообщения: 1471
Стаж: 12 лет 3 месяца
Благодарил (а): 48 раз
Поблагодарили: 71 раз

Re: [3.3] Счётчик сообщений в определённых форумах (в дополнение к обычному)

Сообщение angst66 »

У меня стоит Search User Posts In Topic / Поиск сообщений пользователя в теме , жаль не выводит в скобках число этих сообщиний, как это было в моде на 3.0

Вернуться в «Запросы расширений для phpBB»