| 摘要 | Discourse Surveys 插件允许您使用简单的 Markdown 语法直接在您的 Discourse 论坛帖子中创建调查。 | |
| 仓库链接 | https://github.com/discourse/discourse-surveys | |
| 安装指南 | 如何在 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- 提交按钮

