Discuz!客戶端api開發(一)

前段時間給自己Discuz!x3.2論壇開發客戶端,自己就研究了下discuz的api的接口和流程,記錄下一些重要的點。

api的入口文件,爲根目錄下的api.php,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
define('IN_API', true);//定義api標識
define('CURSCRIPT''api');//定義CURSCRIPT常量
$modarray array('js' => 'javascript/javascript''ad' => 'javascript/advertisement');
$mod = !empty($_GET['mod']) ? $_GET['mod'] : '';
if(empty($mod) || !in_array($modarray('js''ad'))) {
    exit('Access Denied');
}
require_once './api/'.$modarray[$mod].'.php';//包含對應php文件
function loadcore() {
    global $_G;
    require_once './source/class/class_core.php';
    $discuz = C::app();
    $discuz->init_cron = false;
    $discuz->init_session = false;
    $discuz->init();
}
?>

該文件最後包含根目錄下api/mobile/下的文件,源碼中該文件夾裏只有一個index.php文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
<?php
if(!empty($_SERVER['QUERY_STRING'])) {
    $plugin = !empty($_GET['oem']) ? 'mobileoem' 'mobile';
    $dir '../../source/plugin/'.$plugin.'/';
    chdir($dir);
    if((isset($_GET['check']) && $_GET['check'] == 'check' || $_SERVER['QUERY_STRING'] == 'check') && is_file('check.php')) {
        require_once 'check.php';
    elseif(is_file('mobile.php')) {
        require_once 'mobile.php';
    }
}
?>

可以看出,是想包含/source/plugin/mobile/mobile.php的邏輯,所以可以索性直接在api.php中包含mobile的邏輯即可,修改如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
define('IN_API', true);
define('CURSCRIPT''api');
$module = !empty($_GET['module']) ? $_GET['module'] : '';
if(empty($module)) {
    exit('Access Denied');
}
chdir('source/plugin/mobile/');
if((isset($_GET['check']) && $_GET['check'] == 'check' || $_SERVER['QUERY_STRING'] == 'check') && is_file('check.php')) {
    require_once 'check.php';
elseif(is_file('mobile.php')) {
    require_once 'mobile.php';
}
function loadcore() {
    global $_G;
    require_once './source/class/class_core.php';
    $discuz = C::app();
    $discuz->init_cron = false;
    $discuz->init_session = false;
    $discuz->init();
}
?>

如果請求包含了check,則包含check.php代碼,否則直接包含mobile.php的邏輯,即客戶端的處理邏輯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章