トップページから特定のカテゴリをミュートせずに非表示にする方法、またはミュートしたカテゴリの新しいトピック数を取得する方法

私のコミュニティでは、特定のカテゴリに多くのトピックが投稿されています。

時々、人々はそれを迷惑に思い、ホームページから削除したいと考えています。
しかし、これらのユーザーでさえ、それらのカテゴリに完全に興味がないわけでもなく、完全にブロックするためにミュートを使用したいわけでもありません。

そこで、2つのアプローチを考えました。
1:ホームページにチェックボックスを配置し、特定のカテゴリを表示するかどうかを選択できるようにする。
2:そのカテゴリをミュートする代わりに、ミュートされたカテゴリの新しいトピック数をホームページに表示する。ユーザーはナビゲーションバーに追加されたその特定のカテゴリタブをクリックすることで、すぐにカテゴリを見ることができます。

実際、2番目のアプローチで新しいトピック数を表示することはできましたが、コンポーネントの完成直後に、ミュートされたカテゴリの新しいトピック数を取得できないことがわかりました…ミュートされたカテゴリを確認するのを忘れていました…

そのため、次に1番目のアプローチを検討していますが、ホームページのクエリがどのように機能するのか、または特定のカテゴリを非表示にする方法がわかりません…

あるいは、2番目のアプローチ(ミュートされたカテゴリの新しいトピック数を取得する方法)の解決策でも構いません。

どのような助けでも本当に感謝します。

「いいね!」 1

Hi @Programer-D

またはCSSの方法を試すことができます。

どうもありがとうございます。

CSSは盲点でしたが、いくつか試したところ、あまりうまくいかないようです。
私は英語を母国語としないので、うまく説明できなかったのだと思います。
1では、通知は「Normal」の下に設定し、特定のカテゴリを非表示にする必要があります。
CSSでは、カテゴリクラスを取得して非表示にすることができますが、「Watching」と「Tracking」も削除してしまうようです…各トピックの通知設定に基づいてクラスを付与する方法を見つけようと思います。

また、少し調査したところ、カテゴリをトップから削除する機能は、約2年前に激しく議論された機能であり、削除されてミュートに置き換えられたようです。

ミュートに完全に置き換えることに反対していた人たちは正しかったと思います。ミュートは便利な機能です。しかし、「Normal」と「Mute」の間には大きな隔たりがあり、ミュートするとカテゴリが大きく遅れてしまいます。
通知設定をもう一つ追加できるような、その中間の設定があるとよかったのですが。

もう少し考えてみます…

古い「suppress」の動作を再現するプラグインがあると思いますが、役に立ちますか?

大変ありがとうございます。
古いディスカッションを拝見していて、そのようなプラグインの作成について話されていたのを思い出し、探していました。

早速試してみます。

「いいね!」 1

いずれにせよ、デフォルトではすべての通知設定の表示が抑制されているようです。
これはまだ機能的(今思えばCSSでも悪くないですが)ですが、完璧にして通常とミュートの通知設定のみを非表示にできるか試してみます。
プラグインなので改善の余地がありそうなので、少しモチベーションが戻ってきました。ありがとうございます。

「私は英語のネイティブスピーカーではありません。」

あなたの母国語は何ですか?ロシア語/ウクライナ語の場合は、PMへようこそ。
今晩、あなたの問題についてさらに確認します。

もう1つのアイデアは、このカテゴリを特定のグループのみに制限し、ユーザーが必要なときに参加できるようにすることです。
または、デフォルトで参加し、表示したくないときにグループへの参加を停止することです。

また、CSSをグループごとに編集することもできます。たとえば、このグループに簡単に参加するためのボタンを配置できます。

プラグインを少し調べましたが、簡単ではなさそうです。result = Topic::ActiveRecord の中を見ましたが、通知に関連するデータは含まれていないようです。

さらに、ここで個々のトピックの情報を取得し、notification_level を取得することは可能でしょうか。
私も Ruby を含むプラグインを作成したことがありますが、ほとんど JavaScript に頼っていたため、Ruby についてはあまり知りません。

もしかしたら… 「結果」の内容を foreach して各トピックの詳細情報を取得し、notification_level が「Tracking」または「Watching」のトピックのみのトピック ID を記録してリストに格納し、where 句に「OR topics.topic_id IN (#{topic_ids.join(',') を追加すればうまくいくのではないかと思います。あまりきれいなコードではないことは承知していますが、Ruby に詳しくないのでうまくいくかわかりません…

Ruby からトピックを ID で呼び出す方法を探してみます。

どうもありがとうございます。
グループの使用については考えていませんでしたが、現在のプラグインの変更がうまくいかない場合は、検討してみます。

全く理解できていないのですが、なぜかうまくいきました。

もし同じことをしたい人がいたら、ここに残しておきます。

JammyDodgerさんが教えてくれたプラグインの plugin.rb の17行目を

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)")

に変更すると、「Tracking」と「Watching」のトピックはトップページに残りますが、「Normal」のトピックはトップページから非表示になります。

ActiveRecord をちゃんと理解していなかったせいで時間がかかりましたが、ちゃんと問題を伝えられていれば、あなたにとっては簡単な問題だったかもしれません。

この内容を100%理解しているか確信がありませんが、管理設定の default categories muted からカテゴリを「デフォルトでミュート」すると、同様のことができるのではないでしょうか?トピックは「最新」リストには表示されませんが、カテゴリページにアクセスすればすべて表示されます。また、ユーザーがトピックとやり取りして「トラッキング」または「ウォッチ」になると、それらのトピックはユーザーのトピックリストに表示されます。

お探しのものはこれでしょうか?

ミュートは要件を満たしていましたが、1つの問題がありました。それは、新しいトピックを取得できなくなったことです。

このトピック数を取得するコンポーネントを作成しましたが、ミュートされたトピックは新しいトピックに含まれないため、ミュートでは新しいトピック数を取得できないことに気づきました。

このトピック数を取得するコンポーネントを作成しましたが、ミュートでは新しいトピックを取得できないことに気づいたため、新しいトピックの数を取得できませんでした。

そのため、通知設定を「通常」にして、ホームページに表示されないようにする方法を探していました。

これは特殊な状況かもしれません。特定のカテゴリでは、ホームページに望ましくない数の未読トピックがあり、デフォルトでミュートすると新しいトピックに気づきにくくなり、ユーザーが過度にそのカテゴリから離れてしまいます。ホームページに多くのトピックがあるということは、非常に活気のあるカテゴリであることを意味するため、私たちはそれを望みませんでした。

これはユーザー教育で解決すべき問題だったかもしれませんが、とにかくできる限りのことをしたかったので、要件を満たすことができて嬉しく思います。

「いいね!」 2

なるほど、わかりました。あなたにとってうまくいく解決策が見つかってよかったです。:+1::slightly_smiling_face: