volanar
(Volanar)
1
カテゴリーのネストを一段階追加しました。しかし、子カテゴリーにサブカテゴリーを追加すると、それらすべてのカテゴリーがメインページに表示されてしまいます。メインページに表示されるカテゴリーを約100件作成する予定ですが、それぞれのカテゴリーには30〜50のサブカテゴリーが含まれる見込みです。現在、すべてのカテゴリーが1ページにまとめて表示されています。メインページからネスト2段目のカテゴリーを非表示にする設定は見つかりませんでした。
「子カテゴリーのみを表示する」設定を追加し、メインページにカテゴリーツリー全体が表示されないようにする必要があります。そうしなければ、2段目や3段目のカテゴリーが常にメインページに表示されてしまいます。もしそれが数千件に及ぶ場合、どうなるのでしょうか?
「いいね!」 3
pfaffman
(Jay Pfaffman)
2
カテゴリを数百以上持つことは、一般的に推奨されません。ぜひ タグについて話しましょう をご覧ください。サブカテゴリのサブカテゴリ機能は、私が知る限りではほとんどサポートされていませんが、ご希望に応じて非表示にする方法があるかもしれません。
「いいね!」 2
volanar
(Volanar)
3
タグは階層構造のカテゴリほど構造化されていません。サブカテゴリ機能は長らくサポートされてきましたが、個別に有効化する必要があります。ただし、カテゴリツリー全体は表示されます。例えば、NodeBB ではすべて正しく動作しています。ページには子サブカテゴリが表示されますが、さらに深い階層のカテゴリは表示されません。
「いいね!」 3
volanar
(Volanar)
4
この問題は誰か解決されましたか?@Johani さん、お手伝いいただけますか?
「いいね!」 1
Johani
(Joe)
5
あなたが探している機能は、こちらのテンプレートにある 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