ネストレベルを追加すると、カテゴリページに子カテゴリを含むすべてのカテゴリが表示されます

カテゴリーのネストを一段階追加しました。しかし、子カテゴリーにサブカテゴリーを追加すると、それらすべてのカテゴリーがメインページに表示されてしまいます。メインページに表示されるカテゴリーを約100件作成する予定ですが、それぞれのカテゴリーには30〜50のサブカテゴリーが含まれる見込みです。現在、すべてのカテゴリーが1ページにまとめて表示されています。メインページからネスト2段目のカテゴリーを非表示にする設定は見つかりませんでした。

「子カテゴリーのみを表示する」設定を追加し、メインページにカテゴリーツリー全体が表示されないようにする必要があります。そうしなければ、2段目や3段目のカテゴリーが常にメインページに表示されてしまいます。もしそれが数千件に及ぶ場合、どうなるのでしょうか?

「いいね!」 3

カテゴリを数百以上持つことは、一般的に推奨されません。ぜひ タグについて話しましょう をご覧ください。サブカテゴリのサブカテゴリ機能は、私が知る限りではほとんどサポートされていませんが、ご希望に応じて非表示にする方法があるかもしれません。

「いいね!」 2

タグは階層構造のカテゴリほど構造化されていません。サブカテゴリ機能は長らくサポートされてきましたが、個別に有効化する必要があります。ただし、カテゴリツリー全体は表示されます。例えば、NodeBB ではすべて正しく動作しています。ページには子サブカテゴリが表示されますが、さらに深い階層のカテゴリは表示されません。

「いいね!」 3

この問題は誰か解決されましたか?@Johani さん、お手伝いいただけますか?

「いいね!」 1

あなたが探している機能は、こちらのテンプレートにある isGrandParent というプロパティに基づいて決定されます。

discourse/app/assets/javascripts/discourse/app/templates/components/parent-category-row.hbs at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

カテゴリに孫カテゴリが存在する場合、孫カテゴリ用の適切なマークアップがレンダリングされます。それ以外の場合は、子カテゴリがレンダリングされます。

これを回避する最も簡単な方法は、parent-category-row Ember コンポーネント内でそのプロパティを上書きすることです。

modifyClass プラグイン API メソッドを使用して実現できます。

Developing Discourse Themes & Theme Components

modifyClass を使用すると、parent-category-row Ember コンポーネントクラスを再オープンして新しいメソッドを追加できます。

これらのメソッドが実行され、データが利用可能になるようにするには、didReceiveAttrs フックにフックする必要があります。

これを行うには、組み込みのデコレータである @on を使用できます。

準備が整ったら、そのコンポーネントのテンプレートを通じてレンダリングされるすべてのカテゴリに対して isGrandParent を上書きし、すべて false に設定するだけです。

以下に、それらをすべてまとめたコードを示します。

<script type="text/discourse-plugin" version="0.8">
  const { on } = require("discourse-common/utils/decorators");

  api.modifyClass("component:parent-category-row", {
    @on("didReceiveAttrs")
    removeGrandchildCategories() {
      this.category?.set("isGrandParent", false);
    }
  });
</script>

これをテーマの header タブの common に追加します。

これにより、テンプレートは子カテゴリのみをレンダリングし、孫カテゴリは無視するようになります。

この同じパターンを使用して、任意のコンポーネント内の任意のプロパティを変更することもできます。

「いいね!」 2