PHPCMS万能字段的设计与开发

2022-03-23 01:35段尊敬
网络安全技术与应用 2022年2期
关键词:表单字段院系

◆段尊敬

PHPCMS万能字段的设计与开发

◆段尊敬

(山东轻工职业学院 山东 255300)

万能字段在PHPCMS模型表单设计中表现出强大的灵活性和可扩展性,但是设计比较复杂且缺少官方指南。本文由浅入深详细讲述了万能字段的设计方法,重点说明了其参数表单内容中HTML组件、JavaScript的编写和自定义函数,依据本文的设计思路,开发者能够设计出符合各类用户需求的组合型Web表单“输入域”,从而拓展模型表单的输入功能。

PHPCMS;Web表单;万能字段;自定义函数

PHPCMS是一款基于PHP的开源网站管理软件(简称CMS),它采用模块化设计,含有文章展示、文件下载、图片展示、视频播放等常用功能,它既可以设计政府、企事业单位网站,也可以设计视频、音乐和书籍等展示网站,具有功能强大、方便易用的特点。

PHPCMS通过自定义模型、自定义标签和自定义字段表现出强大的灵活性和可扩展性。在自定义字段中,以万能字段最为灵活,它允许开发者自定义PHP函数,并将多个HTML组件和JavaScript代码逻辑耦合,形成组合型Web表单“输入域”(例如多级联动下拉框),由于万能字段设计复杂且没有官方指南,本文将详细阐述其设计和使用方法。

假定一个教师管理系统要求上传学院所有教师的个人信息,每篇教师信息包括姓名、所属院系、个人简介等属性,待填写的教师信息页面称为教师信息表单。首先在后台的“模型管理”添加一个Teacher模型,在模型中为教师各个属性添加自定义字段,下面以“所属院系”为例讲述万能字段的设计和使用。

1 单行文本类型字段

PHPCMS预定义了可用的自定义字段类型,例如:选项、单行文本、多行文本、编辑器等,如图1所示。

最简易的方法是将“所属院系”设置为单行文本类型,当编辑信息表单的时候,管理员手动输入“所属院系”的文本值,这样设计存在以下问题:

(1)输入易出错:手动输入文本费时费力,出错的可能性很大。

(2)数据不一致:如果某院系名称发生了变更,管理员不可能同时知晓,有的输入新名称,有的输入旧名称,这就造成数据不一致。

为了解决上述两个问题,可以将“所属院系”设计成静态万能字段,所谓静态是指仅含有HTML和JS代码,不含有PHP动态脚本。

2 设计静态万能字段

假设学校仅有信息工程系、电子工程系、艺术设计系等三个院系,教师只能属于其中一个,显然应将万能字段设计为SELECT组件,每个院系名称作为OPTION选项,管理员选择了某个OPTION,它的value就作为SELECT的值保存到数据库中。

2.1 参数设置

在Teacher模型中定义一个万能字段,字段名为zy_teacher_dep,如图2所示。

2.2 参数说明

(1)相关参数表单:可以包含HTML组件、JS代码和自定义函数,图中仅包含三个院系的SELECT组件。

(2)字段类型:选择“字符VARCHAR”,表示保存到数据库的数据类型为VARCHAR。

(3)作为基本信息:选择“是”,表示本字段在文章编辑页面的左侧显示。

(4)作为万能字段的附属字段:选择“否”。

图2 参数设置

2.3 注意事项

(1)创建数据保存字段:在表单上创建万能字段时,PHPCMS会在模型数据表teacher_data中创建一个同名字段,用于保存用户提交的字段值。

(2)“字符长度取值范围”最小值设为3:目的是让管理员必须选择院系,如果没有选择,默认项“无”的value长度小于3,表单无法提交。

(3)参数表单中INPUT组件的name必须和字段名一致:本例中SELECT组件的name必须是"info[zy_teacher_dep]",否则PHPCMS无法将字段值保存到表teacher_data的zy_teacher_dep字段中。

(4)附属字段含义:如果本字段是作为其他万能字段的一部分,那么应将“作为万能字段的附属字段”设为“是”。本例中的zy_teacher_dep字段不属于其他万能字段。

2.4 运行结果

设置完毕后,后台编辑文章就可以使用zy_teacher_dep字段了,如图3所示。

图3 运行结果

保存教师信息后,查看Teacher模型的teacher_data表,会发现多了一个VARCHAR类型的zy_teacher_dep字段,它是PHPCMS依据自定义字段名称建立的,用于保存zy_teacher_dep字段的值。

3 设计动态PHPCMS万能字段

3.1 待解决的问题

上述万能字段构造了一个SELECT组件,所有管理员都使用这个组件选择院系,解决了数据不同步的问题,但是存在以下问题:

(1)仅使用了静态HTML代码,没有使用PHP动态脚本,无法链接数据库。

(2)所选院系能够保存进数据库,但是打开文章修改的时候,无法显示已选院系。

3.2 改进思路

一般说来,学校的院系数据保存在基础数据库中,如果院系名称发生变更,由运维人员及时修改,其他应用程序只要从基础数据库读取即可,这是解决数据同步的最好方案,PHPCMS万能字段可以调用自定义函数实现数据库远程读写。

自定义函数的格式规定:{FUNC(函数名~~参数)},函数代码写在extention.func.php文件中;参数表示传递给自定义函数的变量,通常写成{FIELD_VALUE},它表示万能字段在数据表同名字段中的存储值(如果有的话),PHPCMS在调用自定义函数的时候会自动读取;函数名和参数之间用~~分隔。

注意:自定义函数一定要先在extention.func.php中定义好才能在万能字段表单中使用,否则会出错。

3.3 设计自定义函数

zy_college字段表单内容改为:

此函数读取了院系数据组成多个

3.4 运行机制简介

管理员在后台添加文章时,将执行modulescontentcontent.php中的add方法,它调用$content_form类的get方法读取表单中每个字段的已保存值。对万能字段而言,则是执行omnipotent目录下form.inc.php的omnipotent方法,此方法读取数据库中万能字段的值,作为参数传入并调用my_dep_for_video_model自定义函数,返回动态生成的SELECT组件,最后在教师信息表单上呈现出来。

4 设计组合型万能字段

为了阐述组合型万能字段,先拓展教师管理系统的表单功能,假定在教师管理系统中,管理员为每名教师推荐一名学生作为技能大赛培养对象,推荐时先选定某个班级,再选定此班级里的某名学生。这就要求设计一个万能字段包括两个SELECT组件,第一个组件包含可选的班级列表,第二个组件包含被选择班级的学生列表,这个万能字段实际上是个二级联动下拉列表,从功能上看是个“输入域”。

4.1 字段设计

(1)添加万能字段class_name表示可选的班级,作为万能字段的附属字段设为“是”。

(2)添加万能字段students_in_class表示可选的姓名,作为万能字段的附属字段设为“是”。

(3)添加万能字段good_student,它是前面两个万能字段的逻辑组合,作为万能字段的附属字段设为“否”。

(4)students_in_class表单内容:

(5)good_student表单内容:{class_name}的{students_in_class}同学

(6)class_name表单内容:

4.2 运行说明

class_name字段的表单最后一行调用了自定义函数my_get_class,它和my_dep_for_video_model函数功能类似,不同的是此SELECT组件含有onchange方法,参数是管理员选中的OPTION选项的value,如下:

当后台打开教师信息表单的时候,class_name字段先调用my_get_class方法,它读取基础数据库中的可选班级,生成一个包含可选班级的SELECT组件显示在表单上。当管理员选择班级的时候,将执行onchange方法中的ajax语句,调用自定义的xxx.php页面,此页面接收被选中的班级value,在数据库中检索这个班级的所有学生姓名并返回一个name=info[students_in_class]的SELECT组件,如果返回成功,将这个SELECT组件呈现在id为stu_this_class的div中供管理员选择,图4是运行结果。

图4 运行结果

class_name和students_in_class既是万能字段,又是good_student的附属字段,good_student用于在表单上显示这两个字段的逻辑组合。打开Teacher模型的teacher_data表,会发现表中一共创建了3个新字段:class_name、students_in_class、good_student,当提交教师信息表单后,前两个字段分别保存被推荐学生的班级名称和学生姓名,good_student字段其实没有用处。

5 结束语

至此,组合型万能字段设计结束,从功能上看,万能字段就是PHP、JavaScript和多个HTML的Input元素构建的逻辑输入域,能够在表单上呈现个性化、符合用户需求的HTML输入功能并实现数据的读写,其灵活性仅受限于开发者对PHP、JavaScript和HTML的应用水平。根据本文的设计思路,可以设计出更加复杂灵活的万能字段,足以满足绝大多数用户的需求。

猜你喜欢
表单字段院系
带钩或不带钩选择方框批量自动换
移动App表单组件体验设计
浅谈台湾原版中文图书的编目经验
浅谈网页制作中表单的教学
浅谈SQL Server中Select语句的分组统计功能
将互联网+理念引入高校院系财务管理工作的研究
使用智能表单提高工作效率
清华院系手机背景图
无正题名文献著录方法评述
无正题名文献著录方法评述