Скрыть все темы «О категории x»

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

Как можно скрыть все эти темы во всех категориях?

Вы можете убрать их из списка, но вы всё равно будете их видеть, так как вы администратор. :thinking: Хотя вы можете отключить уведомления по этим темам.

Возможно, это можно сделать с помощью CSS?

Не уверен, есть ли у них отдельный класс?

Кажется, проще всего пометить их всех и отключить уведомления для этого тега. (Но скрыть их для всех остальных в их же интересах)

Из любопытства: почему вы хотите скрыть их от себя?

Из любопытства, почему вы хотите скрыть их от себя?

Честно? Мне просто не нравится их видеть. Если я захожу на свой блог… я просто хочу видеть свой блог тоже :slight_smile:

Я нашёл решение. Очевидно, это не масштабируемое решение и может даже не быть технически оптимальным (не уверен, как это будет обрабатываться на крупных сайтах с большим количеством загрузок страниц и т. д.), но оно работает для меня, так как у меня всего одна категория для блога:

ChatGPT дал мне это, и это сработало с первой попытки. Просто нацеливаемся на этот очень конкретный ID темы и скрываем её:

<script>
  document.addEventListener("DOMContentLoaded", function() {
    var element = document.querySelector('[data-topic-id="10"]'); // замените 10 на ваш ID темы
    if (element) {
      element.style.display = 'none';
    }
  });
</script>

Вуаля!

Если вам интересно мнение корпоративных пользователей (ведь я знаю, что мы обсуждали это много лет назад), то проблема заключается в несогласованности административного опыта: тема Discourse используется как настройка категории, тогда как другие настройки категорий не представлены в виде тем Discourse. Это выглядит очень разрозненно (хотя и очень изобретательно!). Я также вижу, что эти темы «О нас» переименовываются и используются как руководства по началу работы (я сам так делаю, но только потому, что вынужден это поддерживать) и т. д.

Я понимаю причины и первоначальную ценность использования темы как уже существующего места для размещения описания темы. Также вижу потенциал в этой возможности, например, когда текст компонента темы discourse-category-sidebars размещается в теме.

Однако с точки зрения UX и администрирования я ожидал бы, что все настройки моей категории будут находиться в одном месте. Discourse уже хранит текст как настройку внутри категории, включая Markdown и всё остальное, для шаблона категории. Было бы здорово увидеть подобную согласованность в настройках категорий.

Надеюсь, это даст немного больше понимания!


РЕДАКТИРОВАНИЕ: Если я упускаю какую-то ценность, которую не заметил, пожалуйста, укажите мне на неё! :rocket:

Кстати, РЕДАКТИРОВАНО:

Облом. Похоже, что скрипт, на который я ссылался выше, работает только при первой загрузке веб-страницы в браузере. Если вы перемещаетесь по сайту и возвращаетесь, эти элементы появляются снова. С моими ограниченными (читай: абсолютно нулевыми) знаниями в веб-разработке, я предполагаю, что это происходит потому, что DOMContentLoaded не запускается повторно после загрузки сайта.

Поиск продолжается…

Думаю, если вы хотите скрыть только одну тему, то это, вероятно, можно сделать с помощью CSS. Мой CSS не очень хорош, но я вижу там data-topic-id, так что, скорее всего, к нему можно обратиться?

А, вот тут есть нюанс! Если вы перепрофилируете их, то такая тема не будет отображаться в некоторых списках тем и не будет отправлять уведомления, когда люди отвечают, и т. д. Думаю, лучшее, что можно с ними сделать в текущем виде, — это просто оставить их как описания категорий, закрыть их (и исключить из списка, если вы не хотите, чтобы они были видны большинству людей). Разумеется, если у вас есть возможность внести изменения в разработку. :slight_smile:

Хранение описания категории в темах также обсуждалось внутри команды, как и то, как мы обрабатываем Условия использования и Руководящие принципы и т. д. Однако никаких немедленных планов по изменению формата нет, но я думаю, что это определенно тема для обсуждения.

Существует тема #feature об изменении настроек по умолчанию:

Это обновление отлично подходит для моего случая.

Если вы хотите скрыть определённую тему с помощью CSS при загрузке страницы и далее, это поможет. Просто добавьте ID ваших тем в список ID тем:

<script>
  document.addEventListener("DOMContentLoaded", function() {
    var topicIdsToHide = ["10", "20", "30"]; // Добавьте сюда ID ваших тем

    function hideElementsByDataTopicIds() {
      topicIdsToHide.forEach(function(id) {
        var element = document.querySelector('[data-topic-id="' + id + '"]');
        if (element) {
          element.style.display = 'none';
        }
      });
    }

    // Запустить функцию изначально
    hideElementsByDataTopicIds();

    // Создать наблюдатель мутаций для отслеживания изменений в DOM
    var observer = new MutationObserver(function(mutations) {
      mutations.forEach(function(mutation) {
        hideElementsByDataTopicIds();
      });
    });

    // Наблюдать за всем документом
    observer.observe(document.body, { childList: true, subtree: true });
  });
</script>