Discourse-плагин для удобного управления подписками на теги прямо со страницы настроек пользователя (/u/:username/preferences/notifications).
Добавляет секцию «Подписки на теги» в настройки уведомлений каждого пользователя. Пользователь видит сгруппированный список тегов и может одним кликом выбрать уровень уведомлений:
- 1 клик — уведомление о новой теме с тегом (
watching_first_post) - 2 клика — уведомление о каждом ответе в теме с тегом (
watching)
Изменения сохраняются вместе с нативной кнопкой «Сохранить изменения» Discourse — никаких отдельных кнопок.
- Группировка тегов по настроенным группам тегов Discourse
- Закреплённые теги вне групп (секция «Иные теги» вверху списка)
- Автовыбор родительского тега при выборе всех дочерних
- Алфавитная сортировка тегов внутри групп
- Порядок групп соответствует порядку в настройках плагина
- Цветовая индикация уровня подписки (два настраиваемых цвета)
- Кнопка «Скрыть» / «Показать» секцию (сохраняется в localStorage)
- Staff видит все группы тегов; обычные пользователи — только доступные им
- Поддержка кастомных display-имён тегов через CSS
::beforeтемы
- Discourse (актуальная stable-версия)
- Теги и группы тегов должны быть включены в настройках форума
В app.yml в секцию hooks.after_code:
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/ban2zai/discourse-tag-subscriptions.gitЗатем пересборка контейнера:
./launcher rebuild appПосле установки перейди в Admin → Settings и найди настройки с префиксом tag_subscription:
| Настройка | Описание | Пример |
|---|---|---|
tag_subscription_groups |
Имена групп тегов через | в нужном порядке |
БГУ Разделы|ЗГУ Разделы|Техно Разделы |
tag_subscription_gated_categories |
Категории, где уведомления по тегам управляются отдельными чекбоксами пользователя; порядок в настройке задаёт порядок в меню | Тех. задание|Инструкции|Инструменты |
tag_subscription_default_enabled_categories |
Gated-категории, где чекбокс уведомлений по тегам включён по умолчанию | Инструкции|Инструменты |
tag_subscription_category_checkbox_label |
Текст перед названием категории в чекбоксах уведомлений по категориям | Получать уведомления по выбранным тегам в категории |
tag_subscription_pinned_tags |
Теги через | для секции «Иные теги» вверху |
какой-раздел|общее |
tag_subscription_level1_color |
Цвет (hex) для уровня «новая тема» | #e5b000 |
tag_subscription_level2_color |
Цвет (hex) для уровня «все ответы» | #cc5500 |
tag_subscription_level1_label |
Подпись в легенде для уровня 1 | Уведомление о новой теме с тегом |
tag_subscription_level2_label |
Подпись в легенде для уровня 2 | Уведомление о каждом ответе в теме с тегом |
tag_subscription_hint |
Подсказка под легендой | Нажмите 1 раз — только новые темы, 2 раза — все ответы, 3 раза — отменить |
Плагин состоит из двух частей:
Ruby (plugin.rb) — эндпоинты GET /tag-subscriptions/tag-groups.json и /tag-subscriptions/preferences.json, доступные залогиненным пользователям. Первый возвращает группы тегов с учётом прав доступа пользователя и поля parent_tag. Второй отдаёт категории, где пользователь может явно включить уведомления по выбранным тегам.
JavaScript/Handlebars — Glimmer-компонент в outlet user-preferences-notifications. Загружает группы через кастомный эндпоинт, текущие подписки через /u/:username.json, а category opt-in через /tag-subscriptions/preferences.json. При сохранении делает PUT /u/:username.json только с тег-полями и отдельно сохраняет category opt-in.
Уведомления — PostAlerter расширяется через prepend: для gated-категорий tag-derived уведомления создаются только пользователям, которые включили категорию в настройках. Прямые упоминания, ответы, watched topic/category и видимость тем не меняются.