Discuz移動接口原理簡介

Discuz論壇內置提供針對移動端開發的json接口,下面根據源碼進行一些分析。

入口 api/mobile/index.phpphp

功能比較簡單,指向source/plugins/mobile/mobile.php 或者check.php,check.php只有當相似$_GET['check'] == 'check'的狀況下才運行,返回系統基本信息;其餘請求均經過mobile.php接管。json

mobile.phpapi

mobile.php的基本思想是根據$_GET['module']以及$_GET['version']來調用相關的module文件,$_GET['version']參數能夠作到版本兼容。spa

mobile/api/%version%/%module%.php接口

實現至關簡單,根據需求設置$_GET['mod']等參數,而後將請求轉到Discuz網頁版頁面,完成請求。同時,文件中定義mobile_api類。ip

mobile_api類開發

mobile_api類包含兩個方法:common與output,common方法對應discuz的runhooks調用;output方法對應discuz的hookscriptoutput調用。源碼

流程io

Discuz調用runhooks時,調用mobile_plugin->common(),調用mobile_api->common()模板

Discuz在模板中調用hookscriptoutput()時,調用mobile_plugin->global_mobile(),調用mobile_api->output()

總結

Discuz大量使用$_G全局變量來保存系統運行過程當中的結果,這爲移動端內容輸出提供便利,只須要在模板輸出前截獲$_G變量,而後根據需求從$_G變量中提取所需數據,並使用json格式返回。這就是Discuz移動端接口的基本實現方式。

相關文章
相關標籤/搜索