ユーザーグループのメンバーシップに基づいてカテゴリを非表示にする

How to split the forum into two main parts (general/groups) and how to display only subcategories I can create a new post in? の議論を続けます:

皆さん、こんにちは。

今回は、私が長らく実現したかった機能を実現するテーマコンポーネントをご紹介します。コードの改善に関するご意見やご提案をいただければ幸いです。

コードがまだ十分ではないと考えているため、誰かに確認されるまでは推奨したくありません。

機能

選択したページにおいて、ユーザーにカテゴリ権限制限が設定されているトピックを CSS で非表示にします。

リポジトリ

リポジトリリンク
framagit.org/oca/discourse-theme-shroud-subcategories

動機

私のコミュニティには多くのグループがあり、他グループのコンテンツを自分たちのグループのメンバーが意識せずに済むようにしたいと考えています。コンテンツへのアクセスを制限するのではなく、メインページに表示されないようにしたいだけです。必要であれば、そのカテゴリに直接アクセスして(例えば、そこで何が議論されているかを知るために)閲覧できるようにすべきです。もちろん、適切な機能は「ウォッチ/無視」機能ですが、UI で設定するには 2 回以上のクリックが必要になるため、コミュニティの誰も使っていません。カテゴリページのいくつかの改善 が解決策になるかもしれませんが、それは私のスキル範囲外です。

そこで、ユーザーにとってシンプルな UI を利用します:グループページです。同じページに、自由にアクセスできるグループとそうでないグループ、そしてその説明が表示されます。これは完璧で、ユーザーはクリックして選択するだけです。グループページは(ハンバーガーメニューの中に隠れているため)ユーザーには見えにくいので、メインページに大きなボタンリンクを配置しました。

これで、グループメンバーシップとカテゴリ投稿の表示を連携させる必要があります。

仕組み

私が使ったテクニックは、カテゴリ権限を以下のように設定することです:

  • 全員: 閲覧、投稿
  • そのグループ: メッセージ作成、閲覧、投稿

そして、リスト内の各トピックについて、カテゴリ制限があるかチェックし、ある場合はトピック要素に not-in-group クラスを追加します。

その後、CSS で display:none を適用して非表示にします。

UI

管理者はこの動作が有効になるページを選択できます。カテゴリページではこれを適用すべきではありません。定義上、そのページはコンテンツにアクセスするための場所だからです。私のウェブサイトでは、これらのグループは latest ページから隠されたサブカテゴリであり、/c/groups/ ページを通じてアクセスするため、そのページを使用しています。

改善点

  • フィルタリング対象カテゴリの親カテゴリを選択可能にする(これにより、その親カテゴリの子でないカテゴリはスキップ対象から除外される)
  • タグを追加し、トピックにそのタグが付いている場合は削除されないようにする
「いいね!」 10

私には意味がわかりません。なぜ、グループが見る内容を制限するためにカテゴリ権限を使わないのでしょうか?

「いいね!」 4

彼らにそれらのカテゴリを見てほしいからです。ただし、それらを閲覧するには、彼らなりの努力を必要とするようにしたいのです。例えば、登録する前に、その特定のプロジェクトで何が議論されているかを確認できるようにするためです。

しかし、メインページでは、彼らが関心のないトピックにスパムされることを避けたいと考えています。最善の方法は、彼らに「ウォッチ/無視」機能を使ってそれらを無視してもらうことですが、それは彼らにとってあまりにも複雑です。別の選択肢として、グループに登録し、カテゴリページに移動して議論内容を確認した後に、グループから登録を解除する方法があります。しかし、これは多くのユーザーにとってクリック数が多すぎますし、さらに、彼らはそれをためらうでしょう。

最後の選択肢は、カテゴリ設定の「最新から除外」ですが、この設定は、そのカテゴリをフォローしているユーザーを含め、すべてのユーザーに影響します。この方法であれば、「最新から除外」と同等の機能を実現できますが、特定のユーザーに対してのみ、かつ希望するすべてのページで適用可能です。

これでより明確になったことを願っています。

「いいね!」 2

これらの改善は完了しました。

「いいね!」 4

とても興味深いです。このコンポーネントがインストールされている例やフォーラムをご覧いただけますか?

「いいね!」 1

また、このコンポーネントでフィルタリングを行うと、サマリーメールでの投稿送信も停止されますか?もしそうなら、それは素晴らしいことです。

「いいね!」 1

いいえ、そうではありません。
投稿へのアクセスを削除するのではなく、CSS で単に非表示にするだけです。
トピックは依然としてユーザーに送信されますが、表示しないという指示が添えられています。
このユースケースは、アクセスを削除することではなく、フロントページ(または選択された他のページ)から単に削除することです。
ログインなしのフォーラムにインストールしたことがないので申し訳ありませんが、ここでは質問を歓迎しますし、PM でも受け付けています。

「いいね!」 2

ありがとう!

この部分はどのような意味ですか?

「いいね!」 1

ページのソースコードを見ると、トピック情報が送信されています。しかし、テーマコンポーネントはそれを無視するように指示しています。

「いいね!」 1

それは閲覧時の「表示」のみが機能するだけであり、ミュートや無視機能ではありません。しかし、この解決策は一部の用途において非常に興味深いと思います。@oca さんのこの取り組みにおめでとうございます!

「いいね!」 2

詳しく確認します。改めてありがとうございます!

「いいね!」 1

こんにちは。このテーマコンポーネントをインストールしたのですが、設定に問題が発生しています。タグやフィルタリングされたカテゴリを選択しようとすると、自分のものが表示されないようです。例えば、FAQタグは確実に存在しているはずですが、選択することができません。タグを直接入力してみましたが、それもうまくいきません。

「いいね!」 2

ダッシュボードでタグ機能が有効になっていますか?「設定」>「タグ」にあります。タグリストの一番上にある最初のボックスで有効化できます。その後、作成したタグはすべて機能するはずです。

「いいね!」 1

はい、タグが有効になっています。

「いいね!」 1

設定パラメータは存在するタグを認識しません。ここにタグ名を入力し、create: 'faq' をクリックすると、タグ名が選択されます。必要なだけタグを選択できます。いずれかのタグが一致すれば、投稿が非表示から表示状態になります。

注意してください。アカウントに管理者権限がある場合、すべてのカテゴリに対する完全な権限が与えられます。カテゴリの非表示は、そのアカウントが実際に新しい投稿を作成できるかどうかで判断されます。あなたのアカウントは作成できるため、すべてのカテゴリのすべての投稿を見ることができます。コンポーネントをテストするには、ユーザーが同じように表示される内容を確認できるよう、テスト用アカウントを作成することをお勧めします。

「いいね!」 2

ありがとうございます。これでうまくいったと思いますし、今後の展開をとても楽しみにしています。あなたの仕事に感謝いたします。

「いいね!」 2

カテゴリを追跡している人に対して、例外を設けることは可能でしょうか?

「いいね!」 1