Discourse 插件开发 part3
中文翻译版 Beginner's Guide to Creating Discourse Plugins Part 3: Custom Settings
原文
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_enabled
和 awesomeness_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
这样写就行。
现在去给插件增加新设置把!