感谢您的指正,@NateDhaliwal
不,它只是嗅探 URL 以查找特定字符串,并在找到该字符串时用几个模板之一预先填充撰写器。
Docus 插件将其字符串放入 URL 中作为其功能之一,但此组件可与任何人想要使用的任何字符串或交付机制配合使用,因此它可以独立存在。我将更新自述文件以解释这一点。
例如,您可以告诉它查找:/tag/introductions,它将成为一个标签模板组件。或者,您可以像我一样使用它,将该模板放入标签交叉点中,例如:tags/intersection/introductions/webdevs
我将它查找的字符串移到管理部分,以便其他人可以更容易地修改和使用它,而无需深入研究代码。
老实说,我这几天一直在与它的一个错误作斗争,快要抓狂了(剩下的头发也没几根了),可能还不应该这么早就分享它。每当它在 URL 中找到该字符串时,它总是会放入一个模板。
有时您希望每当找到该字符串时都执行此操作,有时您只希望在尚不存在其他主题时执行此操作,有时您只希望在该特定用户尚未在该位置创建主题时执行此操作。
目前发生的情况:
初始化程序会监视 URL 中的标签/字符串,并在看到匹配项时在 Discourse 中自动打开一个模板。当我想每次都打开一个模板时,这很有效,但当我的需求是“如果任何主题已存在,则不要打开”或“如果此用户已经发帖,则不要打开”等条件时,它就崩溃了。
我尝试过的:
- 我引入了一个
settings.auto_open_check_user_only标志。当它开启时,代码会搜索tags:tag1+tag2 @username;当它关闭时,它只搜索tags:tag1+tag2。目标是区分“任何主题存在”和“该用户的主题存在”。 - 我在重新开启草稿保存之前增加了 500 毫秒的延迟,以避免与 Discourse 的自动保存冲突。
- 我开始记录基本信息(触发 ID、模板名称),这样我至少可以看到自动打开何时触发。
我怀疑问题在于:
- Discourse 的搜索 API 在搜索索引更新之前返回结果,因此即使在用户发帖后,系统仍然认为“不存在任何主题”。
- 按
@username过滤在用户名不完全匹配或标签与模板设置不一致时没有帮助。 - 我从不取消 Discourse 挂起的草稿计时器,因此即使我阻止保存 500 毫秒,排队的保存仍然会在稍后运行并带回草稿/撰写器。
我目前正在尝试:
- 调用
deleteDraft后,立即取消 Discourse 的_saveDraft防抖动,以防止旧草稿重新出现。 - 创建一个短暂的缓存,记录“我已使用这些标签在此处创建了一个主题”,以弥补搜索索引的延迟。
- 创建 3 种可以在管理部分选择的模式
always
每次标签匹配时都打开模板。没有搜索,没有检查——只是打开撰写器。
ifNoTopics
使用 Discourse 搜索来询问:这些标签是否已经存在任何主题?
- 如果是 → 不打开。
- 如果否 → 打开。
适用于“应该只存在一个主题”的情况。
ifUserHasNoTopic
搜索:此特定用户是否已经使用这些标签创建了主题?
- 如果是 → 不打开。
- 如果否 → 打开。
当每个用户都应该拥有自己的个人主题时很有用。
如果有人对如何创建这些设置有任何建议,我非常乐意听取。