自定义组件——在任何插件出口添加按钮或文本

| | | |\n|— | — | —|\n|:information_source: | 摘要 | 在任何位置添加按钮或文本|\n|:hammer_and_wrench: | 代码库 | https://github.com/literatecomputing/discourse-custom-components|\n|:question: | 安装指南 | 如何安装主题或主题组件|\n|:open_book: | 不熟悉 Discourse 主题? | Discourse 主题使用入门指南|\n\n\u003c!-- 填写 "repoName" 和 "repoURL" 以实现自动安装按钮 –\u003e\n\n[wrap=theme-install-button repoName="Custom Components" repoUrl="https://github.com/literatecomputing/discourse-custom-components\"]\n安装此主题组件\n[/wrap]\n\n\u003c!-- 用一两句话描述此主题/组件 –\u003e\n\n在任何插件插槽中添加链接按钮或任意文本。(忽略图片中的水印——这些截图是在暂存/测试站点上截取的。)\n\n\u003c!-- 适时添加截图 –\u003e\n\n

\n\n\n\n\n\n\u003c!-- 适时添加更多细节并解释设置 –\u003e\n\n我开始开发这个插件是为了有人想在用户个人资料和用户卡片上显示一个“点击此按钮订阅,以便您可以发送私人消息”的按钮。他们希望在用户无法发送私人消息时显示该按钮。由于我并不总是像我想象的那么聪明,所以我使用组来确定是否显示按钮来编写组件。这种方法的一个问题是,工作人员不在订阅组中,因此他们会得到“你必须订阅”的按钮,即使他们可以发送私人消息。此外,该组是隐藏的,因此无论如何都无法在主题组件中使用它。我重写了那个主题组件,使用 currentUser.can_send_private_messages 来确定是否显示按钮。\n\n### 这是为谁准备的?\n\n如果你想在其中放置一个带有链接的按钮,或者一些为特定组显示或隐藏的任意文本,这个组件可以让你将它们插入到任何插件插槽中。你想在每条消息之间添加一个“你该订阅”的链接按钮,但除了非会员之外?这个组件可以做到。你想在插件插槽中插入一些任意的 HTML,只是为了看看它是什么样子?这个组件也可以做到。\n\n### 它如何帮助开发者\n\n这个主题包含一些简单的示例,说明如何:\n- 使用 https://meta.discourse.org/t/objects-type-for-theme-setting/305009\n- 使用 api.renderInOutlet(如此处所述),将 Glimmer 组件放置在由设置控制的插槽中,而不是在 connectors 目录中创建文件\n- 编写一个简单的 Glimmer 组件,该组件可以访问 currentUser\n- 将组件包装在另一个(内联)模板中,以便能够向其传递数据\n- 显示来自主题设置的任意 HTML,摆脱 Markdown 的限制——当然,也许 \n[quote="Discourse, post:1, topic:82557"]\n你可以在这里使用 Ember 的 html-safe 助手,它会渲染 HTML 而不是文本。\n[/quote]\n\n但如果你想在 .gjs 文件中的 \u003ctemplate\u003e 中这样做,它的工作方式会有点不同(例如 {{htmlSafe component.text}}

15 个赞

空格使文本不加粗。


很棒的组件!

5 个赞

是否可以在按钮 URL 中添加占位符,例如让 URL 包含用户所在的 topic ID?

我不确定。如果你有预算,我会看看。

如果按钮有主题 ID,它会做什么?

如果你解决了并且想提交一个 PR,我可能会接受。

我很确定答案是否定的,但你可以使用这里描述的变通方法

2 个赞

您好 @pfaffman

我们希望为我们企业账户用户组中的每位成员添加这样一组按钮。
该按钮将触发创建一个新的私人消息,其中包含用户当前所在的 URL。

这样,我们的企业客户就可以向我们发送固定、突出显示或“赞助”特定主题的请求。

1 个赞

如你所知,你可以创建一个打开新主题撰写器的 URL。你可以让主题组件添加该链接。

我认为,如果不向主题组件添加代码,这是不可能实现的(但也许可以?)。也许有人对此有想法,并在此(或其他主题)提供解决方案。如果没有,你可以联系我,或在 Marketplace 发布你所需内容的描述和预算。

3 个赞