Перейти к содержимому

Форум на сайте - группы, права участников, темы и модерация

Форум как самостоятельный раздел сайта собирается из штатного модуля за пять шагов. Разбираем порядок: группа форумов, форум, вывод компонентом, права участников и модерация сообщений.

Решение

Группа форумов, потом сам форум

Заводим группу, следом форум внутри неё:

Сервисы → Форумы → Группы форумов # сортировка и родительская группа
Сервисы → Форумы → Список форумов # форум привязывается к группе
Настройки форума: активность, индексация, модерация, запрет дублей
Настройки форума: типы файлов, e-mail и CAPTCHA для гостей

Форум привязывается к группе, поэтому группу заводим первой. Сортировка идёт по возрастанию: меньшее число поднимает группу выше в списке, а родительская группа собирает из групп иерархию.

Вывод форума на публичной части

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

$APPLICATION->IncludeComponent('bitrix:forum', '', [
'SEF_MODE' => 'Y',
'SEF_FOLDER' => '/community/forum/', // папка, где живёт раздел форума
'SHOW_FORUMS' => 'SELECTED', // показывать только выбранные форумы
'FORUMS' => [$forumId], // новый форум добавляют сюда руками
]);

Свежий форум открывается по прямой ссылке, но в общем списке не появляется. Причина не в правах и не в активности: отбор компонента показывает только выбранные форумы, а новый в этот список никто не добавил.

Уровни прав участников

Раздаём группам пользователей уровни доступа:

Нет доступа # форума не видно совсем
Чтение # темы и сообщения только на просмотр
Ответ # ответ в существующей теме
Новая тема # создание собственных тем
Модерирование # работа с чужими сообщениями форума
Редактирование # правка сообщений и настроек форума
Полный доступ # форум целиком, включая удаление

Уровни возрастающие, каждый следующий включает предыдущий. Модератору мало уровня на одном форуме: нужен уровень «Модерирование» на каждом форуме плюс право «Запись» на сам модуль форума.

Тема и сообщение из кода

Создаём тему её первым сообщением:

\Bitrix\Main\Loader::includeModule('forum');
$messageId = \CForumMessage::Add([
'FORUM_ID' => $forumId,
'NEW_TOPIC' => 'Y', // без флага нужен готовый TOPIC_ID
'TITLE' => 'Вопрос по доставке',
'POST_MESSAGE' => 'Текст первого сообщения темы',
'AUTHOR_ID' => $userId,
'APPROVED' => 'Y', // на модерируемом форуме ставят N
]);

Руками тему заводят только в публичной части сайта. Административный раздел правит названия готовых тем в разделе управления темами, а создать оттуда новую тему нельзя вообще. Классы модуля процедурные, их сигнатуры лежат в справочнике API, а не в учебных курсах.

Модерация и фильтры

Включаем модерацию и фильтр слов:

Сервисы → Форумы → Список форумов → форум → Модерация
Настройки → Настройки модулей → Форум → фильтр нецензурных слов
Шаблоны фильтра: Слово, Транслит, Регулярное выражение
Сервисы → Смайлы # с версии 15.5.2 форум берёт системные смайлы ядра

Модерация задаётся на уровне форума, а не отдельного сообщения. Премодерация держит новое сообщение скрытым до проверки, постмодерация показывает его сразу и оставляет модератору право удалить написанное позже.

Типичные проблемы

Новый форум открыт по прямой ссылке, а в списке его нет.

Компонент выводит только выбранные форумы, и свежий форум в отбор не попал. Список правится в параметрах компонента, а не в административном разделе.

Страница падает с ошибкой «Указанный форум не найден».

Форум удалён или не привязан к текущему сайту, а компонент хранит его прежний идентификатор. Проверяют список форумов и права групп на найденный форум.

Вложение к сообщению не открывается у рядового участника.

Файл отдаётся с проверкой прав, и уровня ниже «Новая тема» для этого не хватает. У модератора та же ссылка открывается без единой ошибки.

Баллы и звания участников не сошлись после правки шкалы.

Пересчёта задним числом платформа не делает: баллы обновляются при новом сообщении или голосовании. Начисление идёт только при включённой бонусной системе форума.

Тему форума не получается завести из административного раздела.

Темы создаются в публичной части, а админка правит только их названия. Скрипт наполнения форума пишут на классах модуля вместо административных форм.

Частые вопросы

Ещё один форум на сайте с другим оформлением - получится?

Да. Второй экземпляр компонента ставят на отдельную страницу со своим шаблоном и своим отбором форумов. Копировать компонент ради этого не нужно, различаются только параметры и шаблон.

Как настроить форум, чтобы свои сообщения не приходили на почту?

Подписка на тему рассылает все её сообщения, включая написанные самим подписчиком. Галочка «Включать свои сообщения в рассылку» снимается в карточке пользователя на вкладке «Форум».

Как добавить всех существующих пользователей на форум?

Профиль участника форума заводится при первом заходе в раздел. Существующих добавляют перебором выборки пользователей и вызовом CForumUser::Add, а для новых вешают обработчик события добавления пользователя.

Можно прописать свои SEO-теги отдельной теме форума?

Штатных полей заголовка и описания у темы нет: правка через SEO-модуль меняет теги сразу всем страницам форума. Свои значения проставляют в шаблоне компонента по данным текущей темы.

Чем форум отличается от комментариев к новостям и товарам?

Движок один и тот же, различается роль. Форум - видимый раздел сайта со своими группами и темами, а комментарии к элементам скрывают форум за блоком отзывов под карточкой.

Смежное

Первоисточник