こんにちは、初めての Discourse プラグインの開発に取り組んでいます。
概要
タグリンクの動作を少し変更したいと考えています。Discourse 内のどこかでタグをクリックした際、直接そのタグページに遷移するのではなく、2 つの選択肢を表示するようにします。1 つは通常のタグ URL(forum.com/tag/tag-name)、もう 1 つは任意の関連外部ページ(something.site.com/some-name)です。この選択肢は、リストに含まれるタグに対してのみ表示されます。
このリストは、Ruby のハッシュ配列(または JSON)の形式で、プラグインに直接埋め込むか、URL で提供できるようにします(前者の方がリソース面で有利そうです。更新頻度が低いため、リストを更新してプラグインを再ビルドするだけで済みます)。
# Ruby のハッシュ配列
array = [
{forum_tag: "discourse", external_slug: "discourse"},
{forum_tag: "dc", external_slug: "discourse"},
{forum_tag: "xenforo", external_slug: "xenforo"},
{forum_tag: "xf", external_slug: "xenforo"}
]
# または
array.to_json
=> "[{\"forum_tag\":\"discourse\",\"external_slug\":\"discourse\"},{\"forum_tag\":\"dc\",\"external_slug\":\"discourse\"},{\"forum_tag\":\"xenforo\",\"external_slug\":\"xenforo\"},{\"forum_tag\":\"xf\",\"external_slug\":\"xenforo\"}]"
基本的には、メインのフォーラムページで replies 数をクリックした際に表示されるようなオプションを実現したいと考えています。
私の考え
Discourse の API には、タグに関連する 2 つのメソッドを見つけました。
addTagsHtmlCallback- この場合、topic.tagsに値を代入した後、すぐに空の配列に設定する必要があります。これによりtagsのレンダリングを防ぎ、カスタムコードを実装できます。replaceTagRenderer- 2 つ目のメソッドはtagのレンダラーを変更できるため、1 つ目の方法よりも不自然なハックには見えません。
ただし、どちらの場合も raw 文字列を返す必要があります。調べたところ、Ember テンプレートを手動で記述してコンパイルすることはできないようです。もちろん、カスタムリンクをレンダリングし、jQuery を使用した簡単な関数を作成して app/assets/javascripts のルートに配置することも可能ですが、それは Discourse のコードスタイルとは全く異なるアプローチになります。
私の方向性は正しいでしょうか?あらゆるご助言を大歓迎です。
