純屬閑着無聊的- -!,前兩天一直研究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,如需轉載請自行聯系原作者