发帖时是否需要用户填写表单?

用户创建主题时,能否让他们填写一个表单?(例如,在打开“创建主题”窗口时,让一个表单出现在主题中,用户需要填写该表单。)

在使用主题模板创建分类时,我可以添加一些提示,指导用户应该输入什么内容。但这与表单不同。这些提示可以被删除(因此不太懂技术的用户不确定该如何处理它们),而且如果同一页上有多个提示,页面会变得拥挤。

如果我希望用户在创建主题时填写几项关键信息,那么使用表单会是更简洁、更清晰的用户体验。

这是否可行?我找到了这个主题组件,但我不太确定它具体能做什么,而且我认为它无法实现我的需求。我还看到了几年前提出的这个请求,似乎当时没有采取任何行动。

另外,我知道“自定义向导”(Custom Wizard)插件允许创建供用户填写的表单,但在这种情况下,我需要表单位于 Discourse 主题内部(这样它才会作为一个主题出现,并具备所有相关功能,如标签、回复等)。同时,我需要用户体验始终清晰地停留在应用内(我认为“向导”插件会将用户带到一个单独的页面,具有不同的菜单等)。

3 个赞

这些功能在主题组件中从技术上来说肯定是可行的。

3 个赞

对于感兴趣的人来说,一个非常相关的旧话题:

1 个赞

谢谢。

你认为它该如何实现呢?

以下是我的一些想法,不过其中仍有一些问题需要解决:

目前的基础功能:占位符。但现在是“全有或全无”的模式

我能想到的最接近表单行为的基本结构是,在编辑器(即点击“创建主题”时出现的“d-editor”)中显示该“表单”。

在该编辑器中,你可以提供不同的“部分”,例如:

姓名


地点


问题


每个部分的标题将作为一个占位符,因此当用户点击它时,标题(例如“姓名”)就会消失。

到目前为止,通过 占位符文本主题组件 已经可以实现这种设置。

但是,这还不足以实现类似表单的行为,因为目前存在的占位符是“全有或全无”的,正如我接下来要描述的那样。


类似表单的占位符行为。但如何访问编辑器中的 div?

为了使其更像表单,每个部分必须能够独立运作。

目前,使用占位符文本主题组件时,它是“全有或全无”的——如果用户点击编辑器,所有占位符标题都会消失。

因此,要实现基本的表单行为,我们不能让所有标题同时出现或消失,而是需要让每个占位符标题部分独立运作。这样,当用户点击“姓名”占位符时,只有该占位符会消失,而其他占位符(“地点”和“问题”)则保留。

如果每个占位符都能成为文本编辑器内具有唯一 ID 的独立 div 的一部分,那么上述功能就可以实现。然后,借助 jQuery,你可以根据用户是否点击了相应区域来显示或隐藏占位符。这需要在当前为 textarea 的内容中添加独立的 div,但我不确定如何实现这一点。

此方案的疑问:如何访问编辑器 textarea 内的 div,以便在用户点击它们时执行相应操作?


替代方案:使用现有的模板文本选项。但如何使文本不可编辑?

另一种可能的方案是,当用户点击时,部分标题不会“消失”。也就是说,部分标题(例如:姓名、地点和问题)将作为保留在页面上的文本。与当前基本主题模板的默认设置相比,为了使其更像表单:

  1. 部分标题文本不能被用户编辑(即设置 contenteditable="false"
  2. 部分分隔符不能被用户删除
  3. 在部分标题下方应有明显的空间供用户输入。在当前默认模板中,用户必须将光标移至文本处,按 回车 键才能创建输入空间。

此方案的疑问:如何输入模板文本,同时满足以下两点:(i) 该文本对用户不可编辑,(ii) 在每个文本块下方为用户留出清晰的输入区域?


也许还有更好的方法来实现类似表单的行为?

2 个赞

您可能需要在渲染更复杂的输入字段(而非单一的大文本框)之前,先对模板进行一次处理。

然后再进行后处理,将文本插入到正确的位置。

您需要某种标记标准来识别标题和文本输入点……

这可能是一个更轻量级的解决方案,因为所有内容都将保留在前端层面。(所有内容仍将作为单条文本帖子存储。)

这种方法的主要缺点是,这样一来搜索和聚合数据会变得困难得多……

听起来是个有趣的项目 :slight_smile:

我目前需要的是一个完全在前端运行的方案。现阶段不需要解析和搜索表单的不同部分,我认为在大多数使用场景中也无需如此。关键在于确保用户以一致的方式输入他们的回答。

我不太理解你提到的以下内容:

我希望重新探讨这个问题。我希望能在前端让用户填写一个对他们来说看起来像表单的内容。例如,当他们创建主题时,会看到类似以下内容:

“姓名”


“位置”


“问题”


这一切都可以保留在前端。我目前不需要(虽然这很好,但暂时并非必需)解析用户提交内容的不同部分——所有内容可以像现在一样直接提交。目标是确保用户提交的内容更加规范,并在存在多个不同提示时为他们提供简洁的用户界面。

这与目前通过添加主题模板所能实现的功能之间的区别:
  1. 用户无法删除这些提示(例如,无法删除“姓名”、“位置”和“问题”)。

  2. 理想情况下,我可以添加一些类似表单的样式,让用户更清楚地知道应该在何处输入内容。这样可以为创建主题的用户提供更简洁的界面,特别是在存在多个不同提示的情况下。使用主题模板时,用户必须自行创建空间来输入每个提示的回复。此外,当使用当前的主题模板并包含多个不同提示时,创建主题的窗口看起来会显得相当拥挤。

@sam 之前曾回复:

看来这确实是可以实现的。我目前最大的问题是:如何在主题组件(或插件)中更改“创建主题”窗口中显示的内容?目前,当我尝试操作时,它似乎是一个无法介入的 iframe 黑盒。

我知道可能存在某种方法可以进入其中,毕竟主题模板和 占位符插件 正是这样做的。但我尚未弄清楚它们是如何实现的。

关于如何通过代码更改“创建主题”窗口中的内容,有什么建议吗?

1 个赞

请查看 Discourse 主题开发者指南。这是入门的第一步。

如果你指的是用户名和所在地,它们位于用户资料中,因此可能不需要?

感谢您的回复。我熟悉如何构建主题和插件。我在此寻求的是关于如何获取话题创建表单中 iframe 的具体代码指导。我不需要有人把一切都列出来,但任何指导都将不胜感激。我之前一直难以找到修改该表单的方法。

姓名、地点等示例仅是一个常见表单的假设。在我的具体情况下,我需要的是不同的提示。

3 个赞

我也对一种解决方案感兴趣,例如在创建主题时提示用户输入的表单,最好可以选择使某些字段成为必填项;其中一些数据可能很敏感,我想将它们存储在主题中的一些自定义字段中。

1 个赞

请检查 Introducing Experimental Form Templates