我正在编写一个主题组件,希望在帖子“烹饪”(渲染)之前对其进行装饰或修改。如何获取即将被烹饪/显示的帖子的原始(未烹饪)文本?
我阅读了《Discourse 主题开发者指南》,了解到可以使用插件 API 的方法(如 decorateCooked、decorateCookedElement 和 addPostTransformCallback)来修改已烹饪的帖子,但未能找到如何在烹饪前获取帖子的方法。
我还查看了控制器和组件,但也没有成功。
我正在编写一个主题组件,希望在帖子“烹饪”(渲染)之前对其进行装饰或修改。如何获取即将被烹饪/显示的帖子的原始(未烹饪)文本?
我阅读了《Discourse 主题开发者指南》,了解到可以使用插件 API 的方法(如 decorateCooked、decorateCookedElement 和 addPostTransformCallback)来修改已烹饪的帖子,但未能找到如何在烹饪前获取帖子的方法。
我还查看了控制器和组件,但也没有成功。
你需要使用这个函数:
它将覆盖以下内容:
这样你就可以在帖子保存之前对其进行修改。
再见。![]()
感谢您的回复!但我不想保存文本修改,我希望在文本保存后、显示前(且在渲染前)进行修改。
原因是我希望当用户编辑帖子时,能弹出原始文本。我怀疑如果使用 composerBeforeSave,修改后的文本会在编辑时显示出来(?)。
如果你想将其作为主题实现,这将是你的唯一选择。用户输入(Markdown)→ Ruby 服务端渲染 → HTML → 其他用户获取并可能进行装饰。这是在点击保存/回复按钮之前将要执行的流程。它不会出现在草稿中,但你说得对,如果你编辑帖子,它就会显示出来。如果你想绕过这个问题,需要在编辑器打开或切换到已修改的帖子时,撤销保存时所做的更改。我可以进一步详细说明,或者你也可以直接阅读代码并进行自己的实验。
祝好!![]()
编辑:我刚刚想到这一点。理论上,你也可以在客户端进行渲染。但考虑到性能和其他原因,我认为这并非良策。或者,你可以直接开发一个插件:(Superseded) Plugin Tutorial #1 - How to manipulate the text in the composer?
我会去研究一下插件!不过我可能还是会直接修改已发布的帖子(这恰恰是我之前说不想做的
)。
再次感谢!