システムには存在するにもかかわらず、`categories.json`にカテゴリが欠落している (カスタムテーマ)

私たちはカスタムのDiscourseテーマを作成し、JavaScriptを使って特定のカテゴリをトップページに表示しています。このスクリプトは、カテゴリ名の事前定義リスト(カンマ区切りの配列)を利用して、/categories.jsonからコンテンツを取得して表示します。

ほとんどのカテゴリは正しく表示されていますが、いくつかのカテゴリがトップページに欠落しています。それらのカテゴリはスクリプトに明示的にリストされており、システム内の有効なカテゴリIDも持っているにもかかわらずです。

/categories.jsonのレスポンスを調査したところ、これら特定のカテゴリがAPIの出力に全く含まれていないことが判明しました。ただし、それらは以下の条件を満たしています:

  • Discourseインスタンスに存在している
  • トップレベルのカテゴリである
  • everyoneに少なくとも「閲覧」の権限が設定されている
  • アーカイブされていない、非表示ではない、ネストされていない

私たちは次の点について理解したいです:

  1. どのような条件下で、Discourseはcategories.jsonからカテゴリを除外しますか?
  2. 特にホームページに表示したい場合に、必要なすべてのカテゴリがそのレスポンスに表示されるようにするにはどうしたらよいですか?

何か洞察や推奨される解決策があれば教えてください。

わかりませんが、これは /latest にありますか?トピックリストにトピックがあるカテゴリのみが含まれている可能性がありますか?

「いいね!」 1

これは最新の Discourse バージョンですが、まだトピックがありません… カテゴリ ID に基づいて、見えないカテゴリのいずれかにダミートピックを作成しようとしました。これによりカテゴリの JSON が呼び出されてリスト表示されると想定しましたが、役に立たず、ダミートピックも削除しました… 現在、両方のカテゴリにトピックはありません。

これで合っているようです。アウトエージで使用されていないカテゴリのセットを最新のものに送信するのは愚かでしょう。カテゴリをハードコーディングするか、テーマ設定に入れるかのどちらかを行うと思います。

Ajax呼び出しを行うこともできますが、それは速度を低下させます。

参考までに、空のカテゴリを作成したところ、/categories.json で確認できました。

はい。そのエンドポイントを取得すると、カテゴリが含まれていると思いますが、/latest に含まれるカテゴリは、おそらくそれらのトピックに必要なものだけでしょう。

「いいね!」 1

混乱していたようです。 :melting_face: /categories.json が不明な理由で特定のカテゴリを含んでいないのではないかと思い、トピックがないカテゴリが原因かどうかを特定しようとしました。

気にしないでください… :slight_smile:

「いいね!」 1

どちらが混乱していたのかははっきりしません。そして、私たち両方が正しい可能性もあります。OPが何を見ていたのか、私にはまだはっきりしません。

「いいね!」 1

ありがとう Pfaffman、JammyDodger。カスタマイズされたテーマを使用しているため、私たちはホームページに以前非表示にしていたいくつかのカテゴリを追加しようとしました。これは、JavaScriptで既存の公開カテゴリのリストにそれらを追加することによって行いました。この方法を使って、既に5つのカテゴリが正常に表示されています。ただし、これら2つの追加カテゴリを追加しても、ホームページに表示されません。トラブルシューティングのために、それらのうちの1つにトピックを投稿して、表示をトリガーするか試みましたが、効果はありませんでした。

コードを共有していただけますか?GitHubへのリンクなど。

「いいね!」 2

遅延読み込みを有効にしたことで、以前は表示されなかったカテゴリーを表示できるようになりました。どう関係しているのかはわかりませんが、カテゴリーに権限の問題はないことを示唆しています。それでも、この問題の根本的な原因はまだ見つかっていません。

その遅延読み込みのコードは、おそらく送る必要のないと思われるカテゴリを送信しないように設計されていると思います。すべてのカテゴリを送信したいことをそれに納得させる方法がわかりません。