Rhidian
(Rhidian Bramley)
1
主题模板占位符文本主题组件
此主题组件使您能够将主题模板显示为占位符(水印),而不是可编辑的模板文本。
这允许您为每个主题提供自定义说明作为占位符。
例如:
这是正常的占位符(水印)文本。
注意:您现在可以通过更改自定义文本来全局更改此设置。
前往 管理 > 自定义 > 文本
然后搜索您在屏幕上看到的文本。
搜索“BBCode”应该能帮您找到所需内容:
然后将 js.composer.reply_placeholder 的值更改为您想要显示的占位符文本
您也可以在每个类别中设置主题模板。
在“编辑类别”对话框中选择“主题模板”。您可以为类别添加自定义模板。
这效果很好,但用户必须删除模板文本后才能开始输入帖子。
此主题组件使您能够将主题模板文本显示为占位符(水印)文本,而不是可编辑文本。您只需点击文本框即可开始输入。
它可以设置为将所有主题模板显示为占位符,或者您可以通过在主题模板中添加 [placeholder] 指示符,按个案进行设置。
安装主题组件
Git 仓库:https://github.com/naidihr/discourse-topic-template-placeholders
如何安装主题或主题组件?
致谢
感谢 @merefield 重构 JQuery 元素以使用 Ember 框架和 Discourse 核心。
请注意,更新后的版本仅测试在 Discourse 2.4.1 及以上版本中可用。如果您使用的是更早的 Discourse 版本,请尝试原始版本,该版本已在 2.3.10 版本中测试。
原始版本仓库:https://github.com/naidihr/discourse-topic-template-placeholders_original
35 个赞
Rhidian
(Rhidian Bramley)
2
PS 开发备注:我不得不使用一个 jQuery 变通方案,使其作为主题组件正常工作。如果可以通过模型更新占位符,我将不胜感激,请告知我。
8 个赞
Johani
(Joe)
3
你可以尝试类似这样的方法:
<script type="text/discourse-plugin" version="0.8">
api.modifyClass("model:composer", {
applyTopicTemplate() {
this._super(...arguments);
Ember.run.schedule("afterRender", () => {
// 在这里执行你的操作
});
}
});
</script>
这样应该可以让你在 Discourse 应用分类主题模板时添加一些自定义逻辑。
不过,这种编写方式已经有点过时了。如果你打算花大量时间研究 Discourse 主题,我也建议你阅读一下这篇文章,它会让你轻松很多。
9 个赞
这是一个关于主题组件的绝妙想法!
我已经提交了一个 PR 来实现以下目标:
- 移除了对 jQuery 的依赖
- 无需再担心时序问题(利用 Ember 框架和 Discourse 核心,而不是与它们对抗)
- 修改了 Composer 模型以协助达成目标(正如你正确建议的那样)
如果你不合并它,我也不会生气,但希望这能为你展示另一种实现方式 
(我不能保证完全没有 bug,但很乐意跟进任何问题!
)
9 个赞
Rhidian
(Rhidian Bramley)
5
谢谢 Robert。我已经合并了那个 PR。非常感谢 
2 个赞
sunjam
(james.network)
6
1 个赞
请注意,只有在先访问分类并创建新主题后,此功能才能生效。如果尝试从最新页面创建新主题,然后从下拉菜单中选择分类,文本将不会显示。
2 个赞
这是预期的吗?主题模板功能通常就是这样工作的。在后一种情况下,主题模板将不会被考虑。
不过,依我之见,即使没有这个 TC,原生 Discourse 本就可以改进以支持你的后一种情况。我个人觉得,如果用户选择第二种方式,却没有看到模板,这确实令人烦恼。
这个 TC 只是借用了核心功能……
也许我们谈论的不是同一件事,但对我来说是这样运作的…
1 个赞
Johani
(Joe)
11
这可能是由于其他原因,因为在 Meta 上这里可以正常工作。如果你进入 /latest,打开 Composer,然后选择市场分类,你就会看到我们为该分类提供的模板。
4 个赞
是的,很奇怪。抱歉,我想可能已经解决了。这个问题困扰我很久了,但现在似乎能正常使用了。
好的,这带来了新的挑战。哈哈。
4 个赞
Rhidian
(Rhidian Bramley)
13
[quote=“merefield, 第 8 楼,主题 149053”]
主题模板功能通常就是这样工作的。在后一种情况下,主题模板将不会被考虑。[/quote]
你好,Robert——我在合并后测试过,当时是有效的,但现在对我来说不行了?这是在使用覆盖设置的情况下,并没有使用 [placeholder]。能否请你也在你的构建中检查一下?
另外,在我最初的版本中,如果你从最新页面创建新主题,然后选择类别,它也能以同样的方式工作。
我可能需要回滚……?
Rhidian
(Rhidian Bramley)
16
你好 Robert,我已经合并了最后一个 PR,并更新到了最新的主题组件版本,但它仍然显示我为默认设置的模板文本,即使我已经勾选了“将所有主题模板显示为占位符”。我使用的是 Discourse 2.4.1。还有其他建议吗?
2 个赞
这样确实行得通,但如果启用了“将所有主题模板显示为占位符”选项,即使我在该分类中,它也完全无法工作。我现在有点后悔自愿参与这个了?
2 个赞
Rhidian
(Rhidian Bramley)
19
太棒了,Robert。最后一个 PR 已经修复了这个问题。另外,从最新帖子或分类页面发起话题时也没有问题。现在一切看起来都很完美。感谢你花时间处理此事。非常巧妙的解决方案 _做得太棒了 

3 个赞
没问题,很乐意。抱歉我最初的测试不够彻底。感谢您的耐心。
我想我们现在走在正确的轨道上,希望如此!
继续提出更多好点子并付诸实践!
3 个赞
Ryan_NR
(Ryan)
21
大家好!我们非常喜欢这个主题组件的想法!
我刚刚尝试在我们的 Discourse 实例上安装它,但遇到了一些问题。
看起来在主题中启用它后,会破坏主题中已有的部分样式。
例如,用户下拉菜单中的按钮:
启用后变成了这样:
此外,占位符似乎不起作用,无论是否启用了“将所有主题模板显示为占位符(水印文本)”选项。
这可能是因为我们的 Discourse 实例版本是 v2.3.10?
我已经查看了 这里的代码,但无法弄清楚为什么我们的样式会变得混乱。
我们依赖另一个团队来管理和更新我们的 Discourse 实例,而完成这项任务相当繁琐。
希望能得到一个快速的小提示来解决问题,但如果问题出在我们的 Discourse 版本上,那也没关系!
提前感谢 