ThinkPHP修改專案結構

餘二五發表於2017-11-16

   純屬閒著無聊的- -!,前兩天一直研究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`;


這樣就可以生成目錄了.基本結構就是

154217691.png

我把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
return array(
//`配置項`=>`配置值`
);
?>"
);
        // 寫入測試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
return array(
//`配置項`=>`配置值`
);
?>"
);
        // 寫入測試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`);
    }
}


然後訪問http://localhost/Index/index測試。

本文轉自 3147972 51CTO部落格,原文連結:http://blog.51cto.com/a3147972/1288607,如需轉載請自行聯絡原作者


相關文章