基于Moodle框架的医学继续教育与健康科普学习平台的架构设计
2020-04-16黄冠权赵彦喆欧卫冬郑庆华
黄冠权 赵彦喆 欧卫冬 郑庆华
摘 要:为医院内部职工提供继续教育的第二途径,解决传统线下上课方式的不足之处。同时为患者提供认知疾病的方式,消除患者自身对疾病的恐惧与误解。使用模块化面向对象的动态学习环境(Moodle)构建一个面向医院职工和患者的移动端在线学习平台。通过解析Moodle源码,了解其整体架构并做出修改,达到满足继续教育与健康科普的目的。Moodle的模块化开发思想在一定程度上提供了方便快捷的修改方式,使得开发者可以在短时间内实现自定义的在线学习平台。该平台能够为医务人员与患者提供良好的学习方式。
关键词:健康科普;继续教育;在线学习;移动端;Moodle
如今,随着网络的不断普及,大部分人都可以在网上获取到相当客观的信息量。但是这些信息的深度与准确度却无法得到保证。特别是疾病的相关知识,在网络中更是参差不齐、鱼龙混杂,对病患造成了极大的困扰。专业的线上健康科普平台则充分利用多种多样的在线资源,能够让病患在网络上自主学习与查询,提供图文并茂且有深度也有广度的学习体验[1]。
此外,对于医护人员而言也需要不断继续精进自身能力,参与到继续教育中。传统线下教学方式存在着需要较严格的时间配合、占用工作时间、花费额外教育资源和无法重复多次使用的问题。在线继续教育平台则解决了这个问题,其既能保证课程的质量,为医务人员提供不亚于线下上课的体验,也能提供即时的在线问答与讨论交流[2]。
1 Moodle系统简介
无论是医学继续教育,还是健康科普学习,其本质依然是参与到课程中进行学习的行为。可以把在线学习作为基础理论,根据医学继续教育与健康科普学习的实际情况来修改与拓展功能。因此,作为在线课程管理系统的代表,Moodle是进行快速构建本平台的首要选择。
Moodle是由澳大利亚教师Martin Dougiams开发的基于建构主义教育理论的课程管理系统,是一个免费的开源软件,目前已应用于社会的各个领域[3]。Moodle本身针对的是中小型的教育机构,其功能已经比较完善,能够有效地融入到规模不大的教育中。经过多年的开发与演变,目前已发布3.7.2版本,文章将根据此版本进行开发。
2 Moodle系统架构
Moodle本身采用模块化的思想进行设计,比如有课程模块、年级模块、小组模块等。过于抽象的模块化使得部分代码难以理解,无法明确把握数据的流向。但是不可否认的是,这种设计思想令Moodle的扩展能力得到了很大的提升,开发者开发的新模块可以直接被引入到Moodle中,而不需要对其余模块进行修改。
文章只涉及部分模块,仅对这部分文件结构进行描述,Moodle的文件目录结构如图1所示。
可以看到,Moodle的目录结构比较规范。各目录的主要用途如表1所述。
了解这些内容之后,就可以对Moodle进行二次开发。
3 二次开发目的
Moodle对于移动端的主题支持并不完善,很多主题甚至都不包含移动端的适配。此外,Moodle的APP是基于React.js 和TypeScript进行开发的,学习曲线较高。因此,直接修改使用 php开发的Moodle是最为适合的选择。
本课题开发目的是开发出一个移动端的在线学习平台。针对Moodle的boost主题与功能,进行下面的一些改动:
(1)修改认证方式,方便第三方APP接入。
(2)改动侧栏的位置,变为底部标签栏,可左右滑动。
(3)让网站主页(课程浏览页)中课程能够分组显示。
(4)删除用户主页中无用的按钮。
(5)删除顶部标题栏,把消息按钮移动到右下角底部标签栏的位置。
(6)改动課程列表的每个课程的介绍卡片,使得课程标题变大、课程图片拉伸至屏幕宽度。
(7)修改论坛中话题列表的样式,改为卡片的模式,使之适配移动端。
除此之外还有部分利用原有功能进行稍微改动的功能,比如限定视频宽度为屏幕宽度等。
4 对Moodle进行二次开发
首先修改认证的方式,方便第三方APP接入该系统。其基础思想是,使用第三方APP的用户数据。如果平台上没有第三方APP的用户数据,则根据第三方APP传入的数据创建新用户。如果平台上有该用户数据,则直接登录。
由于auth2认证仍需手工创建账户并绑定,所以不使用此方法,使用改写原接口的方式进行认证。与登录相关的模块为login,可以根据该文件夹下的index.php进行修改,把登录所需要的函数提取出来,单独编写一个新的接口。根据login/index.php,整理出所需的函数如下:
lib/user.php 中的 get_user_by_username()
lib/moodlelib.php 中的 create_user_record()
lib/classes/session/manager.php 中的 add_session_record()
lib/classes/session/manager.php 中的 set_user()
lib/classes/session/manager.php 中的 login_user()
lib/moodlelib.php 中的 complate_user_login()
lib/moodlelib.php 中的 get_complete_user_data()
将上述函数提取到新建的php文件中,加以修改,即可完成该功能。
为了适配移动端,对主题进行改造。在Moodle中,页面主要涉及两个部分,一个是布局(layout),一个是块(block)。
一个页面首先得有布局,然后把块的内容插入到布局中。在theme文件夹下有各种主题,每个主题下有template,这就是布局。比如大部分页面都使用两列布局(2 columns),登录页面是单独的布局。在blocks文件夹下有各种块,每个块的文件夹内有这个块的template。比如“课程概览”“我最近查看的课程”等。了解布局原理后,对布局进行修改,把原有左边导航右边内容的布局,改为底部固定导航栏和页面主体显示内容的布局。涉及这个改动的主要有下面一些CSS类。
#nav-drawer:位于theme/boost/style/moodle.css下,是整个导航栏的最外层样式。
.list-group:位于theme/boost/style/moodle.css下,是导航栏中列表的容器样式。
.list-group-item:位于theme/boost/style/moodle.css下,是导航栏列表中每个导航元素的样式。
固定#nav-drawer至手机屏幕底端,令高度固定为4.7 em,并让文字居中显示,具体CSS代码如图2所示。
固定完毕后,整个导航栏的观感已经十分不错,但是依然需要调整。需要让导航栏中导航元素的文字横着排列,且导航元素能够自动横向排列可滚动。此时,需要先令.list-group使用flex布局,然后令.list-group-item的收缩大小flex-shrink为0即可。
Moodle中原有的网站主页中,课程并不能按照类别进行分组,需要对其进行改造。此前已经阐述了Moodle的架构中数据与视图是分开获取与渲染的,因此对获取课程数据进行了追踪,分析出来的课程数据获取过程如下:
(1)网站主页index.php中调用函数frontpage_available_courses()。
(2)调用course/renderer.php中的函数get_courses()。
(3)调用/course/classes/category.php中的函数get_course_records()。此时获取到了课程列表,再在页面中进行渲染。渲染过程如下:
第一,网站主页index.php中调用frontpage()。
第二,进入course/renderer.php中的函数frontpage(),调用 frontpage_part()。
第三,调用course/render.php中的函数coursecat_courses()
此时,如果在控制台中输出$courses变量,可以发现其存储着获取到的所有课程信息,那么只需要根据课程信息中的课程类别字段进行区分即可。
对该部分代码进行改造,根据课程类别从数据库中查找出课程名称,再按课程类别从数组中输出课程至页面,每个类别都使用一个外层div标签进行包裹,即可完成该功能,如图3所示,最终效果如图4所示。
5 结语
医院是与病患最为紧密接触的第一线,有给病患普及与推广疾病相关正确知识的必要。但是单纯依赖医生与护士的口头沟通引导,还是会存在所普及疾病知识深度与广度不足的问题。另一方面,对于医务人员而言,能充分利用零散时间的在线学习平台能够为其提供很大的帮助。因此,在线的学习平台就显得很有必要。文章已经阐述了一種较为简易改造Moodle的方法。在Moodle的加持下,搭建这种类型的平台将会大大减少开发工作量。相信Moodle在医学领域的应用将会越来越广。
[参考文献]
[1]翟羽佳,张鑫,王芳.在线健康社区中的用户参与行为—以“百度戒烟吧”为例[J].图书情报工作,2017(61):75-82.
[2]王冰寒,颜巧元,朱琴,等.基于Moodle的护理科研课程网络学习平台的设计与应用[J].护理教育,2017(8):1052-1056.
[3]彭丽,曾咏梅,干文芝.基于Moodle的一站式学科服务平台的设计与实现[J].四川图书馆学报,2013(3):54-57.