使用Drupal9构建调查问卷与网络投票功能

  Drupal9的webform模块非常神奇,白龙网刚刚接触时,主要用它开发在线留言表单/功能。随着研究的深入,发现这个模块竟然还可以构建网络投票和调查问卷功能。
 
  一、调查问卷
 
  调查问卷功能一般会用到单选、多选、下拉、文本等功能,这在webform中通过相应字段添加上去即可实现,非常简单。
 
  二、网络投票
 
  网络投票一般是单选,很少会用到多选。而具体表现形式一般有文字、图文两种形式。例如,班级内投票选举班干部,可能会涉及参选人的头像+名字;而诸如你最喜欢哪一门功能的投票,则主要是用到单选的功能。
 
  三、在线留言
 
  在线留言功能平时用的比较多,一般用来收集用户线索。主要会到文本、电话、邮箱等功能,通过拖拽即可轻松实现。
 
  宏观上说,用webform构建在线留言、网络投票、调查问卷表单时,必须要有表单元素添加成功之后,表单才能被访问。反之,如果没有添加相关元素的表单,前端会提示没有权限访问。
 
  此外,如果上述操作之后,仍然无法访问表单,可以根据提示设置相应模块的权限允许指定角色的用户访问即可。如果添加的字段没有在表单“添加元素”元素中出现,则可以在“扩展->webform模块“中启用相应模块即可。Webform模块中常用的元素有23种,如下: 

一、单选类型
Radio:可自定义选项,可使用系统自带的选项,每次只可选择其中一个选项;
Radios other:可自定义选项,可使用系统自带的选项,每次只可选择其中一个选项,并且用户可以在other选项中输入自己的内容;
Entity radios:可以调用实体类型content中的标题作为选项,每次只可选择其中一个选项;

二、多选类型	
Checkbox:只有一个复选框,只能勾选一个选项,有点类似于单选Radio,但又与Radio不一样;
Checkboxes:可自定义多个复选框,可以使用系统自带的复选框,每次可以选择1至多个筛选框,标题与选项都可以添加描述性信息与帮助文本;
Checkboxes other:	可自定义多个复选框,可以使用系统自带的复选框,每次可以选择一至多个筛选框,并且用户可以在other选项中输入自己的内容;
Entity checkboxes:可以调用实体类型content中的标题作为选项,每次可选择1至多个选项;
Term checkboxes:可以调用分类taxonomy中的术语作为选项,每次可选择一至多个选项;

三、下拉类型	
Select:自定义或者使用系统内容作为下拉,每次可选择其中一个内容;
Select other:自定义或者使用系统内容作为下拉,每次可选择其中一个内容,并且用户可以额外添加选项;
Table select:表格类型的下拉,有全选功能;如果把内容源设置成空,则可以显示背景为灰色的标题;
Tableselect sort:表格类型的下拉,有全选、排序功能;
Entity select:可以调用实体类型content中的标题作为下拉选项,每次可选择1至多个选项;
Term select:可以调用分类taxonomy中的术语作为下拉选项,每次可选择一至多个选项;
Image select:下拉内容是图片,可以自定义图片或者使用系统图片作为选项,每次可选择1张图片;使用该功能需要在“扩展”中的启用对应“Webform Image Select”模块;

小结:使用单选、多选、下拉功能时,需要在“扩展”中的启用对应“Webform Options Limit”模块;	

四、按钮类型
Buttons:功能与单选类型类同,每次只能选择一个选项;按钮的内容可以是自定义的,或者是来自系统预设的内容;自定义的button需要在在“扩展”中的启用对应“Webform Custom Options”模块,并且选项默认是带框横排排列;系统自带的button默认选项是竖排排列;
Buttons other:与button相比,他多了一个other的选项,让用户可以自定义输入相关内容/需求;	
Submit button(s):用来提交表单;

五、文本类型
Text field:单行文本,可设置规则限定输入内容的格式,可为元素添加描述性文字;可以设置电话、数字、百分比等不同的格式;可以设置帮助、更多等说明性文字;可以通过常规(Input hiding)、高级({value})设置input的默认值(省略号/圆点); 
Textarea:多行文本,可为元素添加描述性文字;
Text format:使用Basic HTML、Full HTML、Plain text、 Restricted HTML等不同的形式输入信息;
Basic HTML:用于打印说明性文本信息,需要给予访问权限;
Advanced HTML/Text:该类型必须出现在layout中,并且需要给匿名用户访问权限才能在前端页面展示文本内容;

六、邮箱类型
Email:常规邮箱地址;
Email confirm:常规邮箱地址;
Email multiple:多个邮箱地址,中间以逗号隔开;

七、电话类型
Telephone:可以设置电话属于哪个国家,按照指定国家的格式输入电话号码,否则会报错;
Telephone advanced:可以设置电话属于哪个国家,按照指定国家的格式输入电话号码,否则会报错;

八、组合类型
Fieldset:可以包含一组表单元素:层、文本、下拉等;
Flexbox layout:包含在Fieldset之中,并且该层可以包含子元素;可以设置层的样式,例如:边距、背景等,以改变不同元素的外观;
两者相结合可以布局更加复杂的在线留言、调查问卷、投票表单;
可以使用元素中条件判断逻辑,用来决定某个元素是否显示,例如,根据根据单选按钮(radio)的值(value)来判断是否显示某个元素;或者根据一个复选框(checkbox)的状态(check/unchedked),来判断某个元素是否显示;

九、文件类型
在setting.php文件配置$settings['file_private_path']目录之后,系统会自动添加如下文件类型,用心上传不同类型的内容:
File:上传文件文档、图片、视频、音频等不同类型的文件;
Document file:上传文档;
Image file:上传图片文件;
Video file:上传视频文件;
Audio file:上传音频文件;

十、自动类型
Autocomplete:自动联想指定的关键词;
Entity autocomplete:自动联想实体的标题;

十一、开关类型
Details:与Fieldset类同,可以包含层、元素等不同类型的内容;

十二、水平类型
Horizontal rule:水平线

十三、复合类型
Likert:横竖两排,二维元素,可以同时把多人、多物操作(例如:投票);

十四、日期类型
Date:日期;
Date list:日期列表;
Time:时间;
Date/Time:日期与时间;

十五、网址类型
url:输入网址;

十六、范围类型
Range:显示数字范围,可以放前缀或者后缀;

十七、评价类型
Rating:好评与差评;

十八、复合类型
Custom composite:与likert 有些类似,是个二维表格,添加一行或者多行二维表格内容;类似于Fieldset、Flexbox、details功能,可以布局、放置多类元素,但是Custom composite也可以包含不同类型的元素,制作表格比较有用;

十九、提示类型
Message:显示一种文字提示,有status、error、warning、infot等4种状态;

二十、行列类型
Mapping:类似于2列多行表格,一列显示源内容,另外一列显示目标内容;

二十一、隐藏类型
Hidden:隐藏输入元素

二十二、颜色类型
Color:颜色选择器;

二十三、编辑类型
CodeMirror:代码编辑器;