テーマ内のカテゴリの完全な説明を取得する

AFAIK、説明はカテゴリの最初の投稿の最初のセクションに保存(および管理)されています。

カテゴリの「トップ」や「最新」ボタンの近くにリンクを追加したいと考えています。テーマはカテゴリごとに設定できないため、カテゴリ説明の「隠された部分」にリンクのデータを追加すればよいと考えました。カテゴリ一覧ではカテゴリ説明の最初の断片のみが表示されるためです。

データは以下のような形式になります:{TAG,linkText,linkTitle,linkHref}。

申し訳ありませんが、これが最善の方法ではないかもしれません:

テーマやウィジェットでカテゴリの説明テキストの完全なデータを取得することは可能でしょうか?

ご協力ありがとうございます。

はい、それが Category Banners が行うことです。

ええと、私の理解では

  • category.description は整形式のカテゴリ説明を返す
  • category.description_text はプレーンデータを返す

はずです。しかし、どちらも説明が含まれるカテゴリの最初の投稿全体ではなく、説明の最初の章のみを返しています。何か見落としているのでしょうか?

おっしゃる通り、それが想定された動作です。Discourse は UI 全体のカテゴリ説明として、トピックの「About」セクションの最初の段落のみを使用します。

それ以外のコンテンツが必要な場合は、追加の API 呼び出しで取得する必要があります。

これはテーマコンポーネントで可能でしょうか?例はありますか?

Topic List Sidebars がまさにこれを実現しています!

特定のカテゴリページでのみリンクを条件付きで表示したいという目的であれば、一度立ち止まって別のアプローチを試すことをお勧めします。

例えば、以下のような設定があると仮定します。

target_category, link_text, link_title, link_href

その場合、こちらのような実装が可能です。

api.addNavigationBarItem({
  displayName: text, // リンクテキスト
  name: title, // リンクタイトル
  href: href, // リンク先
  customFilter: category => {
    return (
      category && category.name.toLowerCase() === TARGET_CATEGORY.toLowerCase() // 対象カテゴリ
    );
  }
});

ここで重要なのは customFilter です。これがまさに求めている機能だと思われます。

複数のリンクを追加する場合は、それを forEach で囲む必要があります。

@Falco さん、ありがとうございます。まさに求めていたものです。

@Johani さん、ありがとうございます。あなたの提案について考えました。残念ながら、カテゴリが膨大に存在するため、設定での構成は非常に大きく、管理が困難になります。そのため、このテーマを作成しました。

現在は正常に動作しています。parent_categories のサポートを追加し、いくつかの小さな不具合を修正した後、ドキュメントを作成し、「正式にリリース」する予定です。

ついに、これで終わりですね。自由にどうぞ。Discourse の開発に携わっている皆様に心から感謝します。素晴らしい仕事です。

テーマコンポーネントへのリンク: