レイアウトを崩さずにカテゴリトップページから3階層目のカテゴリを非表示にするオプション

深い2階層のカテゴリ構造(市内のすべての公共図書館とその個別の支館、および独自の上位カテゴリを持つ中央図書館)を使用しています。最近、いくつかのカテゴリの枝に3階目のネストレベルを導入する必要が生じました。

ツリー内のどこかでカテゴリに孫カテゴリが1つでも存在すると、カテゴリのホームページはレンダリングモードを切り替えます。コンパクトなボックスグリッド(親カテゴリとその直接の子カテゴリを内部にリスト表示)の代わりに、すべてのカテゴリが1列の長いリストとしてレンダリングされます。これにより、ホームページは非常に長くなり、約1,200人のスタッフユーザーにとってスキャンしにくくなります。

これは、関連するスレッドで説明されている isGrandParent プロパティによって制御されているようです:When you add an additional nesting level, all categories, including child categories, are displayed on the categories page

望むこと

推奨オプション: カテゴリに3階目のネストレベルがある場合でも、標準的な「ボックス」レイアウトのホームページを維持する方法。例えば、ホームページに孫カテゴリを表示しないようにする(親カテゴリのページからアクセス可能)。これにより、ホームページのレイアウトが崩れるのを防げます。

代替案: 孫カテゴリを持つカテゴリに対して、カテゴリのホームページ上で直接展開/折りたたみ可能なビューをネイティブに提供し、ユーザーが必要なものだけを展開できるようにする。これにより、すべてのカテゴリがフラットに表示される問題を解消できます。

ネイティブ/公式のソリューションを要望する理由

上記の関連スレッドで議論されているテーマコンポーネント/CSSまたはJSの回避策(modifyClass を介して isGrandParent を上書きするなど)があることは承知していますが、このアプローチは避けたいと考えています。社内にはフロントエンドの専門知識が深くなく、コアのレンダリングロジックを独自に上書きすると、将来のDiscourseアップデートで予期しない副作用や破損が発生する可能性が懸念されます。サポートされている設定や公式のオプションがあれば、長期的なメンテナンスがはるかに安全になります。

Discourseは深いネストを公式に推奨していないことは承知していますが、私たちの組織構造(複数の機関、それぞれに複数の物理的な場所があり、それぞれに独自のスペースが必要)では、ネストの深さは避けられません。

これらのケースにおけるホームページの表示を制御するサポートされた方法があれば、大きな助けになります。2021年以降、他の組織でも隠された3階目の必要性が生じている可能性が高いと確信しています。

添付画像:現在の2階層のホームページレイアウト

および3階目が導入された場合の現在の表示状態。

「いいね!」 5

確信は持てませんが、この Customization > Theme component が、ご要望の機能を実現できるかもしれません。あるいは、少し修正を加えることで対応できるかもしれません。DeV(開発者)がその機能を追加する可能性もあります。

「いいね!」 1

ご要望はもっともなものです。カテゴリが少なく、サブカテゴリが複数階層にわたる場合、/categories ページのレイアウトをバランスよく整えるのは難しい場合があります。

modifyClass の使用はもう推奨していません。ご指摘の通り、この種のオーバーライドを維持するには開発コストがかかるためです。

現在、より安定性を保ちやすい新しいカスタマイズ方法がいくつかあります。この場合、バリュートランスフォーマーが役立ちます。近日中にアップデートで利用可能になるよう、こちらに追加しました:DEV: Add a category-list-subcategories value transformer - Pull Request #42804 - discourse/discourse - GitHub

シンプルなデモは次のようなものです:

api.registerValueTransformer(
  "category-list-subcategories",
  ({ value, context }) =>
  context.page === "categories" && context.category.level >= 1 ? [] : value
);

これにより、サブカテゴリは1階分のみ表示されます。トランスフォーマーを使用することで他のオプションも利用可能になったため、それらをサポートするためにメンテナンス可能なテーマコンポーネントを作成しました。

したがって、Discourse をアップデートした後、これをインストールすることで、/categories やその他のカテゴリ一覧に表示されるサブカテゴリの数を制御できます:

Categories page depth を 2 に設定すると、すべての子孫カテゴリ(孫カテゴリ)が非表示になります。

「いいね!」 2

やあ、本当にありがとう!

レベル2のカテゴリの挙動を予測することはできますか?例えば、隣接するカテゴリが元の順序に戻ったりしないか、といったことです。

「いいね!」 1

はい、順序は同じのままです。これは本質的に isGrandParent を上書きするためのサポートされている方法です。

テストサイトからのビフォー/アフターです。

「いいね!」 3