嗨,我正在开发我的第一个 Discourse 插件。
构想
我们希望稍微调整标签链接的行为:当在 Discourse 的任何位置点击标签时,不直接跳转到该标签页面,而是显示两个选项:正常的标签 URL(forum.com/tag/tag-name)或我们选择的关联(外部)页面(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 中找到了两个与标签相关的方法:
-
addTagsHtmlCallback:在这种情况下,我需要在将topic.tags赋值给其他变量后立即将其设置为空数组。这样我可以阻止渲染tags,并编写自定义代码。 -
replaceTagRenderer:第二个方法允许我更改tag的渲染方式,看起来比第一种方法不那么“hacky”。
不过请注意,在这两种情况下,我都需要返回 raw 字符串。据我所知,无法手动编写和编译 Ember 模板。当然,我可以直接渲染自定义链接,并用 jQuery 编写一个简单的函数,将其放入 app/assets/javascripts 的根目录,但这与 Discourse 的代码风格差异很大。
我的思路对吗?非常感谢您的任何帮助。
