纯属闲着无聊的- -!,前两天一直研究dede,放弃了。无聊最近准备研究ThinkPHP,但是ThinkPHP生成的目录的结构让我很郁闷,个人还是比较喜欢dede之类的那种比较简单的结构,所以今天就下手改了一下。现在分享出来给大家。
1.先修改生成项目目录的主体结构,这个不需要修改ThinkPHP的源码(也可以修改,如果是初学者,最好还是先别修改了)
新建index.php入口文件,然后不按照手册新建项目。输入以下代码;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$root
=dirname(
__FILE__
);
$root
=
str_replace
(
'\\'
,
'/'
,
$root
);
define(
'__ROOT__'
,
$root
);
//网站根目录
define(
'LIB_PATH'
, __ROOT__.
'/libs/'
);
define(
'CONF_PATH'
, __ROOT__.
'/config/'
);
//配置文件目录
define(
'LANG_PATH'
, __ROOT__.
'/lang/'
);
//语言目录
define(
'TMPL_PATH'
, __ROOT__.
'/templates/'
);
//目录文件
define(
'HTML_PATH'
, __ROOT__.
'/a/'
);
//生成静态页面目录
define(
'RUNTIME_PATH'
,__ROOT__.
'/cache/'
);
//缓存目录
define(
'LOG_PATH'
, RUNTIME_PATH.
'/log/'
);
define(
'TEMP_PATH'
, RUNTIME_PATH.
'/temp/'
);
define(
'DATA_PATH'
,RUNTIME_PATH.
'/data/'
);
define(
'CACHE_PATH'
, RUNTIME_PATH.
'/cache/'
);
define(
'APP_DEBUG'
, true);
//开启调试
require_once
'core/ThinkPHP.php'
;
|
这样就可以生成目录了.基本结构就是
我把ThinkPHP文件夹重命名成core了.
2.如果想把Action和Model文件夹也直接放在网站根目录的话,可以直接修改ThinkPHP/Common/runtime.php中第177行左右
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
|
function
build_app_dir() {
// 没有创建项目目录的话自动创建
if
(!is_dir(APP_PATH)) mkdir(APP_PATH,
0755
,
true
);
if
(is_writeable(APP_PATH)) {
$dirs = array(
LIB_PATH,
RUNTIME_PATH,
CONF_PATH,
COMMON_PATH,
LANG_PATH,
CACHE_PATH,
TMPL_PATH,
TMPL_PATH.C(
'DEFAULT_THEME'
).
'/'
,
LOG_PATH,
TEMP_PATH,
DATA_PATH,
LIB_PATH.
'Model/'
,
LIB_PATH.
'Action/'
,
LIB_PATH.
'Behavior/'
,
LIB_PATH.
'Widget/'
,
);
foreach ($dirs
as
$dir){
if
(!is_dir($dir)) mkdir($dir,
0755
,
true
);
}
// 写入目录安全文件
build_dir_secure($dirs);
// 写入初始配置文件
if
(!is_file(CONF_PATH.
'config.php'
))
file_put_contents(CONF_PATH.
'config.php'
,
"<?php\nreturn array(\n\t//'配置项'=>'配置值'\n);\n?>"
);
// 写入测试Action
if
(!is_file(LIB_PATH.
'Action/IndexAction.class.php'
))
build_first_action();
}
else
{
header(
'Content-Type:text/html; charset=utf-8'
);
exit(
'项目目录不可写,目录无法自动生成!<BR>请使用项目生成器或者手动生成项目目录~'
);
}
}
|
改成
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
|
function
build_app_dir() {
// 没有创建项目目录的话自动创建
if
(!
is_dir
(APP_PATH))
mkdir
(APP_PATH,0755,true);
if
(
is_writeable
(APP_PATH)) {
$dirs
=
array
(
LIB_PATH,
RUNTIME_PATH,
CONF_PATH,
COMMON_PATH,
LANG_PATH,
CACHE_PATH,
TMPL_PATH,
TMPL_PATH.C(
'DEFAULT_THEME'
).
'/'
,
LOG_PATH,
TEMP_PATH,
DATA_PATH,
__ROOT__.
'Model/'
,
__ROOT__.
'Action/'
,
__ROOT__.
'Behavior/'
,
__ROOT__.
'Widget/'
,
);
foreach
(
$dirs
as
$dir
){
if
(!
is_dir
(
$dir
))
mkdir
(
$dir
,0755,true);
}
// 写入目录安全文件
build_dir_secure(
$dirs
);
// 写入初始配置文件
if
(!
is_file
(CONF_PATH.
'config.php'
))
file_put_contents
(CONF_PATH.
'config.php'
,
"<?php\nreturn array(\n\t//'配置项'=>'配置值'\n);\n?>"
);
// 写入测试Action
if
(!
is_file
(LIB_PATH.
'Action/IndexAction.class.php'
))
build_first_action();
}
else
{
header(
'Content-Type:text/html; charset=utf-8'
);
exit
(
'项目目录不可写,目录无法自动生成!<BR>请使用项目生成器或者手动生成项目目录~'
);
}
}
|
3.模板目录,直接仿造dede的那种
修改ThinkPHP/Lib/Core/View.class.php 第144行 parseTemplate这个方法,具体是在第183行。修改完的代码
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
|
public
function
parseTemplate($template=
''
) {
if
(is_file($template)) {
$group = defined(
'GROUP_NAME'
)?GROUP_NAME.
'/'
:
''
;
$theme = C(
'DEFAULT_THEME'
);
// 获取当前主题的模版路径
if
(
1
==C(
'APP_GROUP_MODE'
)){
// 独立分组模式
define(
'THEME_PATH'
, dirname(BASE_LIB_PATH).
'/'
.$group.basename(TMPL_PATH).
'/'
.$theme);
define(
'APP_TMPL_PATH'
,__ROOT__.
'/'
.APP_NAME.(APP_NAME?
'/'
:
''
).C(
'APP_GROUP_PATH'
).
'/'
.$group.basename(TMPL_PATH).
'/'
.$theme);
}
else
{
define(
'THEME_PATH'
, TMPL_PATH.$group.$theme);
define(
'APP_TMPL_PATH'
,__ROOT__.
'/'
.APP_NAME.(APP_NAME?
'/'
:
''
).basename(TMPL_PATH).
'/'
.$group.$theme);
}
return
$template;
}
$template = str_replace(
':'
,
'/'
, $template);
// 获取当前主题名称
$theme = $
this
->getTemplateTheme();
// 获取当前模版分组
$group = defined(
'GROUP_NAME'
)?GROUP_NAME.
'/'
:
''
;
if
(defined(
'GROUP_NAME'
) && strpos($template,
'@'
)){
// 跨分组调用模版文件
list($group,$template) = explode(
'@'
,$template);
$group .=
'/'
;
}
// 获取当前主题的模版路径
if
(
1
==C(
'APP_GROUP_MODE'
)){
// 独立分组模式
define(
'THEME_PATH'
, dirname(BASE_LIB_PATH).
'/'
.$group.basename(TMPL_PATH).
'/'
.$theme);
define(
'APP_TMPL_PATH'
,__ROOT__.
'/'
.APP_NAME.(APP_NAME?
'/'
:
''
).C(
'APP_GROUP_PATH'
).
'/'
.$group.basename(TMPL_PATH).
'/'
.$theme);
}
else
{
define(
'THEME_PATH'
, TMPL_PATH.$group.$theme);
define(
'APP_TMPL_PATH'
,__ROOT__.
'/'
.APP_NAME.(APP_NAME?
'/'
:
''
).basename(TMPL_PATH).
'/'
.$group.$theme);
}
// 分析模板文件规则
if
(
''
== $template) {
// 如果模板文件名为空 按照默认规则定位
$template = MODULE_NAME . C(
'TMPL_FILE_DEPR'
) . ACTION_NAME;
}elseif(
false
=== strpos($template,
'/'
)){
// $template = MODULE_NAME . C('TMPL_FILE_DEPR') . $template;
}
return
THEME_PATH.C(
'default'
).$template.C(
'TMPL_TEMPLATE_SUFFIX'
);
}
|
现在测试一下,在根目录下Action中新建IndexAction.class.php
1
2
3
4
5
6
7
8
|
<?php
// 本类由系统自动生成,仅供测试用途
class
IndexAction
extends
Action {
function
index(){
$this
->assign(
'title'
,
'测试标题'
);
$this
->display(
'index'
);
}
}
|
本文转自 3147972 51CTO博客,原文链接:http://blog.51cto.com/a3147972/1288607,如需转载请自行联系原作者