主题入口插件用于标签

嗨,我正在开发我的第一个 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 中找到了两个与标签相关的方法:

  1. addTagsHtmlCallback:在这种情况下,我需要在将 topic.tags 赋值给其他变量后立即将其设置为空数组。这样我可以阻止渲染 tags,并编写自定义代码。

  2. replaceTagRenderer:第二个方法允许我更改 tag 的渲染方式,看起来比第一种方法不那么“hacky”。

不过请注意,在这两种情况下,我都需要返回 raw 字符串。据我所知,无法手动编写和编译 Ember 模板。当然,我可以直接渲染自定义链接,并用 jQuery 编写一个简单的函数,将其放入 app/assets/javascripts 的根目录,但这与 Discourse 的代码风格差异很大。

我的思路对吗?非常感谢您的任何帮助。

感兴趣的朋友请注意,我很高兴宣布我的插件的首个版本已发布!

期待大家的反馈!

对所有感兴趣的朋友,我推荐查看最新的变更,特别是:

祝大家……(?)有个美好的一天!

:smiling_imp:

干得漂亮 @Eiji


我们希望在 Devtalk 上使用这个插件……任何有 Discourse 插件开发经验的同仁,能否帮忙看看是否有可以改进的地方?我们将不胜感激 :blush: