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