Скрыть определенные категории с главной страницы без отключения уведомлений или как получить количество новых тем в категории с отключенными уведомлениями

В моей сообществе в одной конкретной категории опубликовано очень много тем.

Иногда пользователям это кажется раздражающим, и они хотят убрать эти темы со страницы «Главная».
Однако даже такие пользователи не полностью не заинтересованы в этих категориях и не хотят полностью блокировать их с помощью функции «игнорировать».

Поэтому я придумал два подхода:

  1. Добавить на главную страницу чекбокс для выбора, нужно ли отображать определённую категорию.
  2. Вместо полного игнорирования категории отображать на главной странице количество новых тем в этой «игнорируемой» категории. Пользователи смогут сразу увидеть категорию, нажав на соответствующую вкладку, добавленную в панель навигации.

На самом деле, я мог бы реализовать вариант 2, но сразу после завершения разработки компонента обнаружил, что не могу получить количество новых тем в игнорируемой категории… Я забыл проверить игнорируемые категории…

Теперь я рассматриваю вариант 1, но не знаю, как работает запрос для главной страницы или как скрыть определённые категории…

Или даже решение для варианта 2 (как получить количество новых тем в игнорируемой категории) тоже подойдёт.

Буду очень признателен за любую помощь.

Привет, @Programer-D
Вы можете попробовать GitHub - keegangeorge/discourse-hide-categories: This is a theme component that allows you to hide specific categories from either the hamburger menu or category boxes. · GitHub
или использовать CSS.

Большое спасибо.

CSS оказался для меня «слепым пятном», но я попробовал несколько вариантов, и пока ничего не работает особенно хорошо.
Я не носитель английского языка, поэтому, вероятно, не смог достаточно ясно объяснить свою проблему.
В пункте 1 уведомление должно быть установлено ниже уровня «Обычно», а определённые категории нужно скрыть.
В CSS я могу получить класс категории и скрыть её, но, похоже, при этом скрываются и разделы «Слежу» и «Отслеживаю»… Я попробую найти способ присвоить класс на основе настроек уведомлений для каждой темы.

Кроме того, я провёл небольшое исследование и выяснил, что возможность удаления категорий из верхней части была предметом жарких споров около двух лет назад; в итоге её убрали и заменили функцией «Не беспокоить».

Мне кажется, те, кто выступал против полной замены этой функции на «Не беспокоить», были правы. Функция «Не беспокоить» — это хорошо, но разрыв между режимом «Обычно» и режимом «Не беспокоить» слишком велик, а в режиме «Не беспокоить» категория оказывается слишком далеко внизу.
Было бы неплохо иметь промежуточную настройку уведомлений.

Я ещё подумаю над этим…

Кажется, есть плагин, который воспроизводит старое поведение «suppress», если это может быть полезно?

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

Попробую сделать это, как только смогу.

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

Поскольку это плагин, есть куда расти, поэтому я снова почувствовал небольшую мотивацию. Большое спасибо.

Я не носитель английского языка

Какой ваш родной язык? Если русский или украинский — добро пожаловать на PM.
Я сегодня вечером ещё раз проверю информацию по вашей проблеме.

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

Вы также можете отредактировать CSS для разных групп — например, добавить кнопку для лёгкого вступления в эту группу.

Я немного изучил плагин, и всё выглядит не так просто… Я посмотрел внутрь result = Topic::ActiveRecord, и там, похоже, нет никаких данных, связанных с уведомлениями.

Кроме того, я задаюсь вопросом, можно ли отсюда получить информацию по отдельным темам и извлечь notification_level.
Я создавал плагины, в которых тоже использовал Ruby, но в основном полагался на JavaScript, поэтому в Ruby разбираюсь плохо.

Может быть… Я бы хотел перебрать содержимое result, чтобы получить подробную информацию о каждой теме, записать ID тех тем, у которых notification_level равен “Tracking” или “Watching”, в список и добавить в условие WHERE что-то вроде: "OR, думаю, будет хорошо работать, если использовать topics.topic_id IN (#{topic_ids.join(',')}). Я понимаю, что код выглядит не очень красиво, и так как я не знаком с Ruby, не уверен, что это сработает…

Я поищу способ получить тему по её ID из Ruby.

Огромное спасибо.
Я не думал об использовании групп… но если текущая модификация плагина не сработает, я обдумаю этот вариант.

Я не совсем всё правильно понял, но каким-то образом это сработало.

На случай, если кто-то ещё захочет сделать то же самое, оставляю это здесь.

Строка 17 файла plugin.rb плагина, который JammyDodger научил меня использовать.

result.where("topics.category_id NOT IN (#{category_ids.join(",")})")

заменить на

result.where("topics.category_id NOT IN (#{category_ids.join(",")}) OR tu.notification_level IN (2,3)")

Темы со статусами «Отслеживание» и «Наблюдение» остаются на главной странице, а темы со статусом «Обычный» скрываются с главной страницы.
Это заняло у меня время, так как я плохо понимал ActiveRecord, но если бы я правильно сформулировал проблему, для вас это, возможно, было бы лёгким решением.

Я не на 100% уверен, что правильно понимаю это, но если вы используете настройку администратора «default categories muted» для установки «тишины по умолчанию» для категории, это, похоже, уже делает нечто подобное? Темы не будут отображаться в списке «Последние», но все они будут видны при переходе на страницу категории. А если пользователь взаимодействует с какой-либо темой, переводя её в статус отслеживаемой или наблюдаемой, то такие темы будут появляться в его списках тем.

Вот это ли вы имеете в виду?

Режим «Не беспокоить» в целом соответствовал требованиям, но возникла одна проблема: он перестал получать уведомления о новых темах.

Я создал компонент для подсчёта количества таких тем, но понял, что в режиме «Не беспокоить» счётчик новых тем не обновляется, поскольку скрытые темы не учитываются в списке новых.

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

Именно поэтому я искал способ предотвратить их отображение на главной странице при настройке уведомлений «Обычные».

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

Возможно, эту проблему следовало решить путём обучения пользователей, но мы всё же хотели сделать всё возможное, и рады, что нам удалось выполнить требования.

А, теперь я понял. Я рад, что вы нашли решение, которое вам подходит. :+1::slightly_smiling_face: