黃冠權 趙彥喆 歐衛冬 鄭慶華



摘? ?要:為醫院內部職工提供繼續教育的第二途徑,解決傳統線下上課方式的不足之處。同時為患者提供認知疾病的方式,消除患者自身對疾病的恐懼與誤解。使用模塊化面向對象的動態學習環境(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.