阅读 156

ThinkPHP修改项目结构

  纯属闲着无聊的- -!,前两天一直研究dede,放弃了。无聊最近准备研究ThinkPHP,但是ThinkPHP生成的目录的结构让我很郁闷,个人还是比较喜欢dede之类的那种比较简单的结构,所以今天就下手改了一下。现在分享出来给大家。

   1.先修改生成项目目录的主体结构,这个不需要修改ThinkPHP的源码(也可以修改,如果是初学者,最好还是先别修改了)

   新建index.php入口文件,然后不按照手册新建项目。输入以下代码;

   

$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行左右

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>请使用项目生成器或者手动生成项目目录~');
    }
}

改成

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行。修改完的代码

   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

<?php// 本类由系统自动生成,仅供测试用途class IndexAction extends Action {
    function index(){
        $this->assign('title','测试标题');
        $this->display('index');
    }}


然后访问http://localhost/Index/index测试。

QQ2387183033 QQ群:252799167


footer.jpg

©著作权归作者所有:来自51CTO博客作者AndyMac的原创作品,如需转载,请注明出处,否则将追究法律责任

ThinkPHP修改目录结构


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐