郭訓華,莫亭亭,劉武
(上海交通大學電子信息與電氣工程學院,上海 200240)
建設創(chuàng)新型國家需要強化科研設施與儀器的開放共享,為提高貴重儀器設備使用效率,上海交通大學微納電子學系成立了微納分析測試平臺(后簡稱平臺)。平臺實行預約使用制度,最初采用微信群預約,這種方法雖然簡單,但由于預約信息分散,導致預約查詢、機時統(tǒng)計不方便,同時還存在預約消息干擾等缺點。為克服這些缺點,上海交通大學微納電子學系決定開發(fā)一款具有后臺數(shù)據(jù)庫的網(wǎng)上預約系統(tǒng),實現(xiàn)網(wǎng)上預約,提高預約數(shù)據(jù)管理水平。
WordPress 是一款內容管理系統(tǒng)(CMS,Content Management System),它為用戶提供了圖形化管理界面,即使用戶沒有PHP 和HTML 等語言基礎,也可以對網(wǎng)站進行管理和維護[1]。據(jù)網(wǎng)站架構和技術分析軟件wappalyzer 官網(wǎng)提供的數(shù)據(jù),2023 年WordPress 在CMS市場的占有率為75.3%[2]。
對WordPress的研究和應用主要集中在內容管理方面,例如,張素紅的基于WordPress的高等數(shù)學在線教育平臺的設計[3],利用Astra 主題和Tutor LMS 插件實現(xiàn)了視頻播放、成績測試和線上互動等功能;羅黎霞的基于WordPress 的課程管理系統(tǒng)的開發(fā)與研究[4],通過商用插件和開發(fā)主題構建了網(wǎng)絡課程管理系統(tǒng)。
但在實際應用中,還可能在其他應用領域對WordPress 提出需求。比如某單位采用WordPress 建設了門戶網(wǎng)站,后來該單位又出現(xiàn)建設網(wǎng)上預約系統(tǒng)需求,在這種情況下,如果能在已有WordPress網(wǎng)站上開發(fā),不僅能節(jié)省域名申請和網(wǎng)站建設工作、降低軟硬件和網(wǎng)絡資源投入,而且還可以提高信息集成度。本文將分析這種應用的可行性并完成預約系統(tǒng)開發(fā)。
LAMP(Linux、Apache、MySQL 和PHP) 是Word-Press平臺常用的一種運行環(huán)境,所使用的軟件都是免費開源的,是公認的成熟的架構框架[5],如圖1 所示,上海交通大學微納電子學系網(wǎng)站就采用此架構。
圖1 LAMP系統(tǒng)架構
預約系統(tǒng)的軟件架構與LAMP 環(huán)境類似,唯一的區(qū)別是WordPress 管理軟件。如果WordPress 管理軟件能夠實現(xiàn)設備預約功能,那么LAMP 環(huán)境就適用于預約系統(tǒng)。
WordPress 是面向內容管理的軟件,本身沒有提供預約功能,但它為用戶提供了許多擴展功能的應用接口(API) ,包括插件(Plugin) 、微件(Widget)、短代碼(Shortcode)、REST API 等。根據(jù)預約系統(tǒng)特點,提出兩種WordPress 開發(fā)預約系統(tǒng)的方法:插件法和超鏈接法。
1.2.1 插件法
插件是一種基于PHP語言的腳本,可以擴展或改變WordPress 核心功能[6]。插件程序通過add_action()函數(shù)鏈接到WordPress的鉤子(hook),這樣當鉤子運行時,插件也會被運行。主要挑戰(zhàn)如下:
1.2.1.1 表單
表單是預約系統(tǒng)的關鍵功能,瀏覽器通過表單將預約信息提交給服務器,產(chǎn)生表單有兩種方法:一是用PHP 代碼直接輸出包含表單的頁面;二是將表單HTML 代碼轉換成短代碼,通過頁面內插入短代碼添加表單。商用表單插件Formidable Forms 就采用了短代碼方式。
提交表單有以下三種方式:
1)提交到admin-post.php或admin-ajax-post.php
WordPress 在admin-post.php 和admin-ajax-post.php 文件中創(chuàng)建了四種鉤子,可利用這些鉤子實現(xiàn)表單處理。以鉤子admin_post_nopriv_{$action}為例,使用方法如下:
第一步:表單中將表單提交地址設置為adminpost.php