Discourse 插件开发 part2
中文翻译版 Beginner’s Guide to Creating Discourse Plugins Part 2: Plugin Outlets
原文
Beginner’s Guide to Creating Discourse Plugins Part 2: Plugin Outlets - developers - Discourse Meta
起步:handlebars 模板(Getting Started: Handlebars Templates)
Discourse 用了 Ember.js 做前端框架。
Ember 用 Handlebars 做 HTML 模板。强烈建议先阅读这个链接里的信息,了解基础。
问题:添加元素到 Discourse 用户界面(The Problem: Adding elements to the Discourse User Interface)
很多插件需要扩展 Discourse 的界面. 所以我们提供了 plugin outlets 机制来做到这点。
如果你看 Discourse 自己的 handlebars 模板,会经常看到
{{plugin-outlet name="edit-topic"}}
这里声明了一个 plugin-outlet 叫 edit-topic
这是一个扩展点(extension point),插件可以把自己的 hardlebars 标签插入这里。
当你写插件的时候,请翻阅 handlebars 模板(.hbs 后缀的文件)
看看想用那个 {{plugin-outlet}}
,如果你发现没有适合你的,欢迎告知我们,如果使用案例合理,我们很乐意加进去!
如果你想看 plugin-outlets 都在哪里,可以跑如下命令(如果你用的是 macOS / Linux)
git grep "plugin-outlet" -- "*.hbs"
@Mittineague 也写了个插件 来显示这些 outlet 的地址。
我承认自己还没试过这个插件,但是看起来会挺有帮助的。
连接到 Plugin Outlet (Connecting to a Plugin Outlet)
你找到了一个合适的 plugin outlet 之后,可以写 connector
。
connecter 其实就只是一个 handlebars 模板文件(.hbs 文件)。
放在 connectors/<outlet name>
路径
举例:假设模板是
{{plugin-outlet name="evil-trout"}}
你想把内容插入到如下位置
任何在 connectors/evil-trout
目录的 handlebards 文件都会被自动添加到上面这个地方。
假设
plugins/hello/assets/javascripts/discourse/templates/connectors/evil-trout/hello.hbs
内容是
<b>Hello World</b>
Discoursee 会把这个 <b>Hello World</b>
插入到 {{plugin-outlet name="evil-trout"}}
的位置
如果碰到问题如何解决(Troubleshooting)
- 检查 connector 的名字是否和 plugin-outlet 完全一致
- 有疑问就直接
rm -rf tmp/
,删掉 tmp 文件夹,然后重启 Rails 服务器。