/
router.php
123 lines (99 loc) · 2.79 KB
/
router.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
class ROUTER extends CORE{
public static
$uri, # 取得的 uri
$class, # 紀錄轉址 class
$args; # 解析完成後參數
function __construct(){
# 去除根目錄
if(self::$cfg["root"] == "/"){
$uri = preg_replace("/^\//", '', $_SERVER["REQUEST_URI"],1);
}else{
$uri = str_replace(CORE::$cfg["root"], '', $_SERVER["REQUEST_URI"]);
}
$uri = urldecode($uri);
# 解析位置
if(!empty($uri)){
$uri_array = explode("/",$uri); # 拆解 uri
$uri_array = self::lang_switch($uri_array); # 語系解析
self::args_switch($uri_array); # 參數解析
}else{
# 首頁
self::$class = 'INDEX';
}
}
# 語系解析
private static function lang_switch(array $uri_array){
$origin_array = $uri_array;
$lang_str = array_shift($uri_array);
$lang_array = CORE::$cfg["lang"][$lang_str];
if(isset($lang_array) && is_array($lang_array)){
CORE::$cfg["router"] = $lang_str;
CORE::$cfg["langfix"] = $lang_array[0];
CORE::$cfg["langtag"] = $lang_array[1];
return $uri_array;
}else{
return $origin_array;
}
}
# 參數解析
private static function args_switch(array $uri_array){
# 刪除尾空直
if(empty($uri_array[count($uri_array) - 1])){
array_pop($uri_array);
}
# 轉址功能
$uri_array = REWRITE::handle($uri_array);
# 頁次偵測
$uri_array = self::page_handle($uri_array);
$uri_array = self::sk_handle($uri_array);
if(is_array($uri_array)){
$origin_args = $uri_array;
self::$class = strtoupper(array_shift($uri_array));
self::$args = $uri_array;
if(!class_exists(self::$class)){
self::$args = $origin_args;
self::$class = 'INDEX';
}
}else{
# 首頁
self::$class = 'INDEX';
}
}
# 頁次處裡
private static function page_handle(array $uri_array){
$origin_args = $uri_array;
$last_args = array_pop($uri_array);
if(preg_match('/page-/', $last_args)){
PAGE::$now = preg_replace('/page-([0-9]+)/', "$1", $last_args); # 載入頁次參數
$return_args = $uri_array;
}else{
$return_args = $origin_args;
}
self::$uri = implode("/",$return_args);
return $return_args;
}
# 搜尋處理
private static function sk_handle(array $uri_array){
$origin_args = $uri_array;
$last_args = array_pop($uri_array);
if(preg_match('/sk-/', $last_args)){
SK::$now = preg_replace('/page-([^\/]+)/', "$1", $last_args); # 載入搜尋參數
$return_args = $uri_array;
}else{
$return_args = $origin_args;
}
#self::$uri = implode("/",$return_args);
return $return_args;
}
# 初始功能
public static function class_init(){
CHECK::is_must(self::$class);
if(CHECK::is_pass()){
CORE::$class = self::$class;
CORE::$args = self::$args;
new self::$class();
}
}
}
?>