Discourse 插件开发 part3

中文翻译版 Beginner's Guide to Creating Discourse Plugins Part 3: Custom Settings

Discourse 插件开发  part3

原文

Beginner's Guide to Creating Discourse Plugins Part 3: Custom Settings

网站设置 Site Settings

以管理员身份访问 /admin/site_settings 会看到很多设置。
但我们理解大家想定制论坛,更符合自己的需求。

除非插件非常简单,否则你八成会想在后台加插件菜单。让用户配置插件。
幸运的是,这做起来非常简单!

config/settings.yml

首先在 plugin 文件夹里新建一个 config/settings.yml,以下是一个例子:

plugins:
  awesomeness_enabled:
    default: true
    client: true
  awesomeness_max_volume:
    default: 10
    client: true

文件格式必须是 YAML
可以用 YAMLint 验证格式是否正确

最顶层的 plugins: 告诉 Discourse,我们想让这些设置出现在 site setting 里的 “Plugins” 下面。

然后声明了 awesomeness_enabledawesomeness_max_volume 2个设置
Discourse 会根据 default 判断类型,这里是 布尔值 true 和数字 10

client: true 很重要.
Discourse 由2个部分组成,后端的 API 是 Ruby on Rails。前端部分是 Ember.js。
默认情况是不会把设置暴露到 Ember.js ,除非写了 client: true 才会。
之所以这样做是因为很多设置都是私有的,比如 API 一类的,不应该发给用户看。

在上面的例子里,我们既想设置可以在 javascript 中访问 + 在服务端访问。

重要的第二步(An important second step)

给设置加上翻译,因为 Discourse 支持多语言。插件也要支持多语言。
来做一个英语的:config/locales/server.en.yml

en:
  site_settings:
    awesomeness_enabled: "Is this plugin awesome?"
    awesomeness_max_volume: "What is the maximum volume possible?"

这里的文字会加到后台设置中,所以越易懂越好。

把设置写成启用(Declaring the setting as the 'enabled setting’)

打开 plugin.rb 添加:

enabled_site_setting :awesomeness_enabled

确保你的其他设置都以 awesomeness_ 开头,
这样 /admin/plugins 才能正常工作

访问你的新设置(Accessing your new Settings)

首先重启 Rails 服务器,确保一切生效。之后代码都应该可以访问了。

site setting 会自动注入到大部分 javascript 对象里,
所以如果你声明一个 Component, Controller, Route, View 或者 Model,
this.siteSettings.awesomeness_enabled 你就可以用了。

handlebars templates 里用 {{siteSettings.awesomeness_enabled}} 就可以显示了

这个教程里我们还没讲 Ruby 相关的东西,如果想在 Ruby 里访问设置,
SiteSetting.awesomeness_enabled 这样写就行。

现在去给插件增加新设置把!