天天看点

ThinkPHP修改项目结构

   纯属闲着无聊的- -!,前两天一直研究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>"&lt;?php\nreturn array(\n\t//'配置项'=&gt;'配置值'\n);\n?&gt;"</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>'项目目录不可写,目录无法自动生成!&lt;BR&gt;请使用项目生成器或者手动生成项目目录~'</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>"&lt;?php\nreturn array(\n\t//'配置项'=&gt;'配置值'\n);\n?&gt;"</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>'项目目录不可写,目录无法自动生成!&lt;BR&gt;请使用项目生成器或者手动生成项目目录~'</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>-&gt;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>) &amp;&amp; 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>&lt;?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>-&gt;assign(</code><code>'title'</code><code>,</code><code>'测试标题'</code><code>);</code>

<code>        </code><code>$this</code><code>-&gt;display(</code><code>'index'</code><code>);</code>

本文转自 3147972 51CTO博客,原文链接:http://blog.51cto.com/a3147972/1288607,如需转载请自行联系原作者