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的逻辑,即客户端的处理逻辑。

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