JQ331
1
用户创建主题时,能否让他们填写一个表单?(例如,在打开“创建主题”窗口时,让一个表单出现在主题中,用户需要填写该表单。)
在使用主题模板创建分类时,我可以添加一些提示,指导用户应该输入什么内容。但这与表单不同。这些提示可以被删除(因此不太懂技术的用户不确定该如何处理它们),而且如果同一页上有多个提示,页面会变得拥挤。
如果我希望用户在创建主题时填写几项关键信息,那么使用表单会是更简洁、更清晰的用户体验。
这是否可行?我找到了这个主题组件,但我不太确定它具体能做什么,而且我认为它无法实现我的需求。我还看到了几年前提出的这个请求,似乎当时没有采取任何行动。
另外,我知道“自定义向导”(Custom Wizard)插件允许创建供用户填写的表单,但在这种情况下,我需要表单位于 Discourse 主题内部(这样它才会作为一个主题出现,并具备所有相关功能,如标签、回复等)。同时,我需要用户体验始终清晰地停留在应用内(我认为“向导”插件会将用户带到一个单独的页面,具有不同的菜单等)。
3 个赞
JQ331
4
谢谢。
你认为它该如何实现呢?
以下是我的一些想法,不过其中仍有一些问题需要解决:
目前的基础功能:占位符。但现在是“全有或全无”的模式
我能想到的最接近表单行为的基本结构是,在编辑器(即点击“创建主题”时出现的“d-editor”)中显示该“表单”。
在该编辑器中,你可以提供不同的“部分”,例如:
姓名
地点
问题
每个部分的标题将作为一个占位符,因此当用户点击它时,标题(例如“姓名”)就会消失。
到目前为止,通过 占位符文本主题组件 已经可以实现这种设置。
但是,这还不足以实现类似表单的行为,因为目前存在的占位符是“全有或全无”的,正如我接下来要描述的那样。
类似表单的占位符行为。但如何访问编辑器中的 div?
为了使其更像表单,每个部分必须能够独立运作。
目前,使用占位符文本主题组件时,它是“全有或全无”的——如果用户点击编辑器,所有占位符标题都会消失。
因此,要实现基本的表单行为,我们不能让所有标题同时出现或消失,而是需要让每个占位符标题部分独立运作。这样,当用户点击“姓名”占位符时,只有该占位符会消失,而其他占位符(“地点”和“问题”)则保留。
如果每个占位符都能成为文本编辑器内具有唯一 ID 的独立 div 的一部分,那么上述功能就可以实现。然后,借助 jQuery,你可以根据用户是否点击了相应区域来显示或隐藏占位符。这需要在当前为 textarea 的内容中添加独立的 div,但我不确定如何实现这一点。
此方案的疑问:如何访问编辑器 textarea 内的 div,以便在用户点击它们时执行相应操作?
替代方案:使用现有的模板文本选项。但如何使文本不可编辑?
另一种可能的方案是,当用户点击时,部分标题不会“消失”。也就是说,部分标题(例如:姓名、地点和问题)将作为保留在页面上的文本。与当前基本主题模板的默认设置相比,为了使其更像表单:
- 部分标题文本不能被用户编辑(即设置
contenteditable="false")
- 部分分隔符不能被用户删除
- 在部分标题下方应有明显的空间供用户输入。在当前默认模板中,用户必须将光标移至文本处,按
回车 键才能创建输入空间。
此方案的疑问:如何输入模板文本,同时满足以下两点:(i) 该文本对用户不可编辑,(ii) 在每个文本块下方为用户留出清晰的输入区域?
也许还有更好的方法来实现类似表单的行为?
2 个赞
您可能需要在渲染更复杂的输入字段(而非单一的大文本框)之前,先对模板进行一次处理。
然后再进行后处理,将文本插入到正确的位置。
您需要某种标记标准来识别标题和文本输入点……
这可能是一个更轻量级的解决方案,因为所有内容都将保留在前端层面。(所有内容仍将作为单条文本帖子存储。)
这种方法的主要缺点是,这样一来搜索和聚合数据会变得困难得多……
听起来是个有趣的项目 
JQ331
6
我目前需要的是一个完全在前端运行的方案。现阶段不需要解析和搜索表单的不同部分,我认为在大多数使用场景中也无需如此。关键在于确保用户以一致的方式输入他们的回答。
我不太理解你提到的以下内容:
JQ331
7
我希望重新探讨这个问题。我希望能在前端让用户填写一个对他们来说看起来像表单的内容。例如,当他们创建主题时,会看到类似以下内容:
“姓名”
“位置”
“问题”
这一切都可以保留在前端。我目前不需要(虽然这很好,但暂时并非必需)解析用户提交内容的不同部分——所有内容可以像现在一样直接提交。目标是确保用户提交的内容更加规范,并在存在多个不同提示时为他们提供简洁的用户界面。
这与目前通过添加主题模板所能实现的功能之间的区别:
-
用户无法删除这些提示(例如,无法删除“姓名”、“位置”和“问题”)。
-
理想情况下,我可以添加一些类似表单的样式,让用户更清楚地知道应该在何处输入内容。这样可以为创建主题的用户提供更简洁的界面,特别是在存在多个不同提示的情况下。使用主题模板时,用户必须自行创建空间来输入每个提示的回复。此外,当使用当前的主题模板并包含多个不同提示时,创建主题的窗口看起来会显得相当拥挤。
@sam 之前曾回复:
看来这确实是可以实现的。我目前最大的问题是:如何在主题组件(或插件)中更改“创建主题”窗口中显示的内容?目前,当我尝试操作时,它似乎是一个无法介入的 iframe 黑盒。
我知道可能存在某种方法可以进入其中,毕竟主题模板和 占位符插件 正是这样做的。但我尚未弄清楚它们是如何实现的。
关于如何通过代码更改“创建主题”窗口中的内容,有什么建议吗?
1 个赞
pfaffman
(Jay Pfaffman)
8
请查看 Discourse 主题开发者指南。这是入门的第一步。
如果你指的是用户名和所在地,它们位于用户资料中,因此可能不需要?
JQ331
9
感谢您的回复。我熟悉如何构建主题和插件。我在此寻求的是关于如何获取话题创建表单中 iframe 的具体代码指导。我不需要有人把一切都列出来,但任何指导都将不胜感激。我之前一直难以找到修改该表单的方法。
姓名、地点等示例仅是一个常见表单的假设。在我的具体情况下,我需要的是不同的提示。
3 个赞
我也对一种解决方案感兴趣,例如在创建主题时提示用户输入的表单,最好可以选择使某些字段成为必填项;其中一些数据可能很敏感,我想将它们存储在主题中的一些自定义字段中。
1 个赞
Falco
(Falco)
12