「x カテゴリについて」のトピックをすべて非表示にする

これらはすべてデフォルトで管理者に常に表示されることは承知しています。しかし、Discourseで構築している個人サイトでは、管理者であってもそれらを表示したくないとしましょう。

すべてのカテゴリでこれらのトピックをすべて非表示にするにはどうすればよいですか?

管理者であれば、それらをリストから削除しても表示されてしまいます。:thinking: ただし、トピックをミュートすることはできます。

CSSで可能でしょうか?

専用のクラスはないのでしょうか?

「すべてにタグ付けしてタグをミュートする」アプローチを試してみるのが、最も手間がかからないように思えます。(ただし、他の人のためにリストから外してください)

ちなみに、なぜご自身から隠したいのですか?

「いいね!」 1

好奇心からですが、ご自身から隠したいのはなぜですか?

正直に言うと?見たくないんです。ブログに行ったら…ブログだけを見たいんです :slight_smile:

解決策を見つけました。これは明らかにスケーラブルな解決策ではなく、技術的にも最適ではないかもしれません(多くのページロードがある大規模なサイトでどのように処理されるかはわかりませんが)、しかし、ブログのカテゴリが1つしかない私にとっては、私にとって機能するものです。

ChatGPTがこれをくれて、最初の試みでうまくいきました。この非常に特定のトピックIDをターゲットにして非表示にするだけです。

<script>
  document.addEventListener("DOMContentLoaded", function() {
    var element = document.querySelector('[data-topic-id="10"]'); // 10 をトピック ID に置き換えてください
    if (element) {
      element.style.display = 'none';
    }
  });
</script>

ビオラ!

「いいね!」 1

エンタープライズでの利用について(以前投稿/返信したことがあるので、ご存知かもしれませんが)気になるのは、Discourseのトピックがカテゴリ設定として利用されている一方で、他のカテゴリ設定はDiscourseのトピックとして表示されていないという、一貫性のない管理体験です。非常にまとまりがない(それでも非常に巧妙ですが!)。また、これらの「トピックについて」が改名され、開始ガイドとして利用されている(私もそうしていますが、それは強制されているからです)など、他にも見られます。

トピックを既存の場所として利用し、トピックの説明を格納するという理由と、その初期価値は理解しています。また、discourse-category-sidebarsテーマコンポーネントのテキストがトピックによって格納されるといった、同じ機能の可能性も理解しています。

しかし、UXと管理の観点からは、すべてのカテゴリ設定が1か所にあることを期待します。Discourseはすでに、カテゴリテンプレートのために、Markdownなどを含めて、カテゴリの設定としてテキストを保存しています。この方法でカテゴリに一貫性をもたらすことができれば素晴らしいでしょう。

これで少し洞察が得られたことを願っています!


編集:もし、まだ見ていない価値があるなら、教えてください!:rocket:

また、編集:
残念。上記でリンクしたスクリプトは、Webページがブラウザで最初に読み込まれたときにのみ機能するようです。サイト内を移動して戻ってくると、それらの要素が再び表示されます。私の限られた(つまり、まったくゼロの)Web開発知識では、サイトが読み込まれた後にDOMContentLoadedが再度実行されないためだと推測します。
検索は続きます…

CSSを使えば、おそらく1つのトピックを非表示にできると思います。私のCSSの知識は乏しいですが、data-topic-idが見えるので、ターゲットにできるはずです。

ああ、そこには落とし穴があります! 再利用すると、そのトピックは一部のトピックリストに表示されなくなったり、ユーザーが返信したときに通知が送信されなくなったりします。それらに対して最善の方法は、そのままカテゴリの説明として残し、閉鎖すること(そして、ほとんどの人に見えないようにしたい場合はリストから除外すること)だと思います。もちろん、開発上の微調整が可能であれば、それも検討すべきです。:slight_smile:

カテゴリの説明をトピックに保存することについては、内部で議論があったほか、利用規約やガイドラインの扱いについても議論がありました。フォーマットを変更する具体的な計画はありませんが、間違いなく議論すべき点はあると思います。

デフォルトの変更に関する#featureトピックがあります

「いいね!」 2

これは私のユースケースに完全に適合するアップデートです。

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>