Discourse 调查

:discourse2: 摘要 Discourse Surveys 插件允许您使用简单的 Markdown 语法直接在您的 Discourse 论坛帖子中创建调查。
:hammer_and_wrench: 仓库链接 https://github.com/discourse/discourse-surveys
:open_book: 安装指南 如何在 Discourse 中安装插件

Discourse Surveys 插件允许您使用简单的 Markdown 语法直接在您的 Discourse 论坛帖子中创建调查。该插件目前支持多种问题类型,例如单选按钮、复选框、下拉菜单、数字输入、文本区域、星级评分以及赞成/反对评分。

功能

  • 7 种不同的字段类型:单选按钮、复选框、下拉菜单、文本区域、数字选择、星级评分和赞成/反对
  • 必填/可选字段:将字段标记为必填以确保完成
  • Emoji 支持:在调查选项中使用 emoji
  • HTML 支持:问题和选项中的富文本格式
  • 用户身份验证:对匿名用户自动提示登录
  • 响应跟踪:防止同一用户重复提交
  • 权限感知:尊重主题和类别的权限
  • 移动响应式:在所有设备上无缝工作

用法

基本调查结构

所有调查都必须用 [survey] 标签包裹:


[survey name="my-survey" title="客户反馈调查"]

<!-- 调查字段放在这里 -->

[/survey]

调查属性

  • name: 调查的唯一标识符(默认为“survey”)
  • title: 显示在调查顶部的可选标题
  • public: 设置可见性(未来功能)
  • status: 调查状态(未来功能)

字段类型

1. 单选按钮(单选)


[radio question="你最喜欢的颜色是什么?"]

- 红色

- 蓝色

- 绿色

- 黄色

[/radio]

2. 复选框(多选)


[checkbox question="您使用哪些功能?(选择所有适用的)"]

- 电子邮件通知

- 移动应用

- 桌面通知

- API 访问

[/checkbox]

3. 下拉选择


[dropdown question="您的年龄段是?"]

- 18 岁以下

- 18-24

- 25-34

- 35-44

- 45-54

- 55 岁以上

[/dropdown]

4. 文本区域(长篇文本)


[textarea question="请提供详细反馈:" required="false"]

[/textarea]

5. 数字选择


[number question="请从 1-10 为此功能评分:" min="1" max="10"]

[/number]

6. 星级评分


[star question="您对整体体验的评价如何?"]

[/star]

7. 赞成/反对


[thumbs question="您会推荐给其他人吗?"]

[/thumbs]

字段属性

所有字段类型都支持以下属性:

  • question: 问题文本(必需)
  • required: 字段是否必须填写(true/false,默认为 true
  • min: 数字字段的最小值
  • max: 数字字段的最大值

完整示例

基本调查 Markdown

这是一个包含所有可用字段的基本调查 Markdown 示例:

[survey name="awesome-survey-thumbs" title="超棒的调查"]

[radio question="选择任意一个选项:"]
- 猫
- 狗
[/radio]

[checkbox question="选择多个选项:"]
- 红色
- 蓝色
- 绿色
[/checkbox]

[dropdown question="性别:"]
- 男
- 女
[/dropdown]

[number question="请从 1 到 10 为此调查评分:"]
[/number]

[textarea question="您对 xyz 的反馈是什么?" required="false"]
[/textarea]

[star question="您对整体体验的评价如何?"]
[/star]

[thumbs question="您对我们的服务满意吗?"]
[/thumbs]

[/survey]

调查渲染

下面是上述 Markdown 在 Discourse 中渲染的示例:

高级用法

在选项中使用 Emoji


[radio question="选择您最喜欢的动物:"]

- 🐈 猫

- 🐶 狗

- 🐦 鸟

- 🐠 鱼

[/radio]

问题中的 HTML 格式化


[radio question="您更喜欢哪个 <strong>编程语言</strong>?"]

- JavaScript

- Python

- Ruby

- Go

[/radio]

混合必填和可选字段


[survey name="mixed-survey"]

[radio question="您的角色是什么?" required="true"]

- 开发者

- 设计师

- 经理

- 其他

[/radio]

[textarea question="还有其他想法吗?" required="false"]

[/textarea]

[/survey]

调查结果

目前,此插件没有用于直接查看调查结果的后端用户界面。相反,您可以依赖 Data Explorer 查询来获取和分析调查回复。这是一个示例查询:

-- [params]
-- text :survey_name = survey

SELECT
  s.id,
  s.name,
  s.post_id,
  sf.question,
  COALESCE(sr.value, sfo.html) AS value,
  sr.user_id,
  sr.created_at AS responded_at
FROM
  surveys s
  JOIN survey_fields sf ON sf.survey_id = s.id
  JOIN survey_responses sr ON sr.survey_field_id = sf.id
  LEFT JOIN survey_field_options sfo ON sfo.id = sr.survey_field_option_id
WHERE
  s.name = :survey_name
ORDER BY
  s.id DESC

权限和安全

  • 需要登录:匿名用户必须先登录才能提交回复
  • 每位用户仅限一次回复:每位用户只能对每个调查提交一次回复
  • 主题权限:用户必须具有查看主题的权限才能查看调查
  • 发帖权限:用户必须在主题中拥有发帖权限才能提交回复
  • 已存档主题:已存档主题中的调查不能接受新的回复
  • 已删除帖子:已删除帖子中的调查将不再可访问

限制

  • 每个帖子只允许一个调查
  • 收到回复后无法修改调查结构
  • 单个调查中所有调查字段的问题必须是唯一的
  • 调查字段的问题不能为空

技术细节

数据库架构

该插件创建四个主要的数据库表:

  • surveys: 主要调查记录
  • survey_fields: 调查中的单个字段
  • survey_field_options: 选择类字段的选项
  • survey_responses: 用户对调查字段的回复

样式

该插件包含适应您主题的响应式 CSS。可以通过定位以下 CSS 类添加自定义样式:

  • .survey - 主调查容器
  • .survey-field - 单个字段包装器
  • .field-[type] - 特定字段类型的容器
  • .submit-response - 提交按钮
32 个赞