天天看點

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,如需轉載請自行聯系原作者