В моей сообществе в одной конкретной категории опубликовано очень много тем.
Иногда пользователям это кажется раздражающим, и они хотят убрать эти темы со страницы «Главная».
Однако даже такие пользователи не полностью не заинтересованы в этих категориях и не хотят полностью блокировать их с помощью функции «игнорировать».
Поэтому я придумал два подхода:
Добавить на главную страницу чекбокс для выбора, нужно ли отображать определённую категорию.
Вместо полного игнорирования категории отображать на главной странице количество новых тем в этой «игнорируемой» категории. Пользователи смогут сразу увидеть категорию, нажав на соответствующую вкладку, добавленную в панель навигации.
На самом деле, я мог бы реализовать вариант 2, но сразу после завершения разработки компонента обнаружил, что не могу получить количество новых тем в игнорируемой категории… Я забыл проверить игнорируемые категории…
Теперь я рассматриваю вариант 1, но не знаю, как работает запрос для главной страницы или как скрыть определённые категории…
Или даже решение для варианта 2 (как получить количество новых тем в игнорируемой категории) тоже подойдёт.
CSS оказался для меня «слепым пятном», но я попробовал несколько вариантов, и пока ничего не работает особенно хорошо.
Я не носитель английского языка, поэтому, вероятно, не смог достаточно ясно объяснить свою проблему.
В пункте 1 уведомление должно быть установлено ниже уровня «Обычно», а определённые категории нужно скрыть.
В CSS я могу получить класс категории и скрыть её, но, похоже, при этом скрываются и разделы «Слежу» и «Отслеживаю»… Я попробую найти способ присвоить класс на основе настроек уведомлений для каждой темы.
Кроме того, я провёл небольшое исследование и выяснил, что возможность удаления категорий из верхней части была предметом жарких споров около двух лет назад; в итоге её убрали и заменили функцией «Не беспокоить».
Мне кажется, те, кто выступал против полной замены этой функции на «Не беспокоить», были правы. Функция «Не беспокоить» — это хорошо, но разрыв между режимом «Обычно» и режимом «Не беспокоить» слишком велик, а в режиме «Не беспокоить» категория оказывается слишком далеко внизу.
Было бы неплохо иметь промежуточную настройку уведомлений.
В любом случае, похоже, что по умолчанию отображение всех настроек уведомлений подавляется. Это всё ещё работает (хотя в ретроспективе 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, не уверен, что это сработает…
Я не совсем всё правильно понял, но каким-то образом это сработало.
На случай, если кто-то ещё захочет сделать то же самое, оставляю это здесь.
Строка 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» для установки «тишины по умолчанию» для категории, это, похоже, уже делает нечто подобное? Темы не будут отображаться в списке «Последние», но все они будут видны при переходе на страницу категории. А если пользователь взаимодействует с какой-либо темой, переводя её в статус отслеживаемой или наблюдаемой, то такие темы будут появляться в его списках тем.
Я создал компонент для подсчёта количества таких тем, но понял, что в режиме «Не беспокоить» счётчик новых тем не обновляется, поскольку скрытые темы не учитываются в списке новых.
Я создал компонент для подсчёта количества таких тем, но заметил, что в режиме «Не беспокоить» не отображается счётчик новых тем, поэтому я не мог получить число новых тем.
Именно поэтому я искал способ предотвратить их отображение на главной странице при настройке уведомлений «Обычные».
Возможно, это особая ситуация. Для определённой категории на главной странице оказывается слишком много непрочитанных тем, а по умолчанию включение режима «Не беспокоить» затрудняет замечание новых тем и чрезмерно отпугивает пользователей от этой категории. Мы не хотели этого допускать, поскольку большое количество тем на главной странице свидетельствует о очень активной категории.
Возможно, эту проблему следовало решить путём обучения пользователей, но мы всё же хотели сделать всё возможное, и рады, что нам удалось выполнить требования.