Topic Template Placeholder Text 主题组件

主题模板占位符文本主题组件

此主题组件使您能够将主题模板显示为占位符(水印),而不是可编辑的模板文本。

这允许您为每个主题提供自定义说明作为占位符。

例如:

这是正常的占位符(水印)文本。

注意:您现在可以通过更改自定义文本来全局更改此设置。

前往 管理 > 自定义 > 文本

然后搜索您在屏幕上看到的文本。
搜索“BBCode”应该能帮您找到所需内容:

然后将 js.composer.reply_placeholder 的值更改为您想要显示的占位符文本

您也可以在每个类别中设置主题模板。

在“编辑类别”对话框中选择“主题模板”。您可以为类别添加自定义模板。

这效果很好,但用户必须删除模板文本后才能开始输入帖子。

此主题组件使您能够将主题模板文本显示为占位符(水印)文本,而不是可编辑文本。您只需点击文本框即可开始输入。

它可以设置为将所有主题模板显示为占位符,或者您可以通过在主题模板中添加 [placeholder] 指示符,按个案进行设置。

安装主题组件

:hammer_and_wrench: Git 仓库:https://github.com/naidihr/discourse-topic-template-placeholders

:thinking: 如何安装主题或主题组件?

致谢

感谢 @merefield 重构 JQuery 元素以使用 Ember 框架和 Discourse 核心。

请注意,更新后的版本仅测试在 Discourse 2.4.1 及以上版本中可用。如果您使用的是更早的 Discourse 版本,请尝试原始版本,该版本已在 2.3.10 版本中测试。
原始版本仓库:https://github.com/naidihr/discourse-topic-template-placeholders_original

35 个赞

PS 开发备注:我不得不使用一个 jQuery 变通方案,使其作为主题组件正常工作。如果可以通过模型更新占位符,我将不胜感激,请告知我。

8 个赞

你可以尝试类似这样的方法:

<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 模型以协助达成目标(正如你正确建议的那样)

如果你不合并它,我也不会生气,但希望这能为你展示另一种实现方式 :slight_smile:

(我不能保证完全没有 bug,但很乐意跟进任何问题!:cowboy_hat_face:

9 个赞

谢谢 Robert。我已经合并了那个 PR。非常感谢 :+1:

2 个赞

这简直就是我一直在找的东西!你真是神!:bowing_man: :shallow_pan_of_food: :bowing_woman:
请接受我卑微的表情符号供奉。:canned_food:

1 个赞

请注意,只有在先访问分类并创建新主题后,此功能才能生效。如果尝试从最新页面创建新主题,然后从下拉菜单中选择分类,文本将不会显示。

2 个赞

这是预期的吗?主题模板功能通常就是这样工作的。在后一种情况下,主题模板将不会被考虑。

不过,依我之见,即使没有这个 TC,原生 Discourse 本就可以改进以支持你的后一种情况。我个人觉得,如果用户选择第二种方式,却没有看到模板,这确实令人烦恼。

这个 TC 只是借用了核心功能……

也许我们谈论的不是同一件事,但对我来说是这样运作的…

1 个赞

这可能是由于其他原因,因为在 Meta 上这里可以正常工作。如果你进入 /latest,打开 Composer,然后选择市场分类,你就会看到我们为该分类提供的模板。

4 个赞

是的,很奇怪。抱歉,我想可能已经解决了。这个问题困扰我很久了,但现在似乎能正常使用了。

好的,这带来了新的挑战。哈哈。

4 个赞

[quote=“merefield, 第 8 楼,主题 149053”]
主题模板功能通常就是这样工作的。在后一种情况下,主题模板将不会被考虑。[/quote]

你好,Robert——我在合并后测试过,当时是有效的,但现在对我来说不行了?这是在使用覆盖设置的情况下,并没有使用 [placeholder]。能否请你也在你的构建中检查一下?

另外,在我最初的版本中,如果你从最新页面创建新主题,然后选择类别,它也能以同样的方式工作。

我可能需要回滚……?

我现在正在看。请稍等一下。

修复的 PR 已提交:FIX: change the placeholder & template when switching selected Category by merefield · Pull Request #2 · naidihr/discourse-topic-template-placeholders · GitHub

现在它会从编辑器选择中获取分类。既然已完成,看起来在所有情况下都能正常工作,请确认一下。

2 个赞

你好 Robert,我已经合并了最后一个 PR,并更新到了最新的主题组件版本,但它仍然显示我为默认设置的模板文本,即使我已经勾选了“将所有主题模板显示为占位符”。我使用的是 Discourse 2.4.1。还有其他建议吗?

2 个赞

这样确实行得通,但如果启用了“将所有主题模板显示为占位符”选项,即使我在该分类中,它也完全无法工作。我现在有点后悔自愿参与这个了?:stuck_out_tongue_winking_eye:

2 个赞

没问题,大家。我们只需不断迭代。:slight_smile: 我会看一下。

更新:PR https://github.com/naidihr/discourse-topic-template-placeholders/pull/3

在检出时,如果更改了设置,请记得刷新页面。

2 个赞

太棒了,Robert。最后一个 PR 已经修复了这个问题。另外,从最新帖子或分类页面发起话题时也没有问题。现在一切看起来都很完美。感谢你花时间处理此事。非常巧妙的解决方案 _做得太棒了 :wink::+1:

3 个赞

没问题,很乐意。抱歉我最初的测试不够彻底。感谢您的耐心。

我想我们现在走在正确的轨道上,希望如此!

继续提出更多好点子并付诸实践!

3 个赞

大家好!我们非常喜欢这个主题组件的想法!

我刚刚尝试在我们的 Discourse 实例上安装它,但遇到了一些问题。
看起来在主题中启用它后,会破坏主题中已有的部分样式。
例如,用户下拉菜单中的按钮:

启用后变成了这样:


此外,占位符似乎不起作用,无论是否启用了“将所有主题模板显示为占位符(水印文本)”选项。

这可能是因为我们的 Discourse 实例版本是 v2.3.10

我已经查看了 这里的代码,但无法弄清楚为什么我们的样式会变得混乱。

我们依赖另一个团队来管理和更新我们的 Discourse 实例,而完成这项任务相当繁琐。

希望能得到一个快速的小提示来解决问题,但如果问题出在我们的 Discourse 版本上,那也没关系!

提前感谢 :smiley: