視圖是 Web 的可見內容,一般是 HTML結合 PHP 獲取的數據提供給用戶使用的部分,屬于 MVC 中的 V。
一. 模版定義
模版在使用之前需要一定的設置,才能方便開發者使用。每個模塊的模版文件是獨立的,
為了對模版文件更加有效的管理,ThinkPHP 對模版文件機型目錄劃分,默認的模版文件定
義規則是:
視圖目錄/[模版主題/]控制器名/操作名+模版后綴
第一步:在 User 控制器模塊執行一條語句: (即在 Home/controller/UserController.class.php 中插入)
1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 5 class UserController extends Controller { 6 public function index() { 7 $this->display(); 8 } 9 }
什么都沒有定義的情況下,會自動報錯,錯誤信息提示如下:
1 模板不存在:./WeiBo/Home/View/User/index.html
也就是這時,顯示的是 ./WeiBo/Home/View/User/index.html 中的代碼
通過這個錯誤提示,我們只要在 View 目錄下創建 User 目錄,并在 User 目錄下創建
index.html 文件,這時模版渲染模版輸出成功。
默認情況下視圖目錄是 View,如果你想改變成別的目錄名可以設置:(在 WeiBo/Common/Conf/config.php 中插入)
1 //修改模版的視圖目錄 2 'DEFAULT_V_LAYER' =>'Template',
也就是以后會在 ./WeiBo/Home/Template/User/index.html 中顯示內容
默認情況下的模版文件后綴是.html,如果你想改變成別的后綴可以設置:
1 //修改模版中的文件的后綴 2 'TMPL_TEMPLATE_SUFFIX'=>'.tpl',
如果感覺每一個模塊,都要創建相應的目錄太過于麻煩,可以設置:
1 //用下劃線代替目錄層次 2 'TMPL_FILE_DEPR'=>'_', //User_index.tpl
以后訪問的則是: ./WeiBo/Home/View/User_index.html 了。
如果不想將模版存在在當前 Weibo 目錄下,而設置在外部:
1 //設置外部的模版目錄 2 'VIEW_PATH'=>'./Public/',
這時的Public是與weibo目錄同級的
如果一個系統要考慮多套界面皮膚的話,要考慮到默認皮膚以及可選皮膚:
1 //設置默認主題目錄 2 'DEFAULT_THEME'=>'default',
以后訪問的默認主目錄是 WeiBo/View/default 下的內容,也就是說,View下可建立多個不同名字的目錄,
如果要更改的話,可在 Home/controller/UserController.class.php 中寫入:
此時已在 WeiBo/View/ 下建立Blue的目錄
1 class UserController extends Controller { 2 public function index() { 3 $this->theme('blue')->display(); 4 } 5 }
二.賦值和渲染
如果要在模版中輸出變量,必須在控制器中把變量傳遞給模版。ThinkPHP 提供了
assign 方法對模版變量賦值,無論何種變量類型都統一使用 assign 賦值。
在 Home/controller/UserController.class.php 中插入以下代碼:
1 <?php 2 3 namespace Home\Controller; 4 use Think\Controller; 5 6 class UserController extends Controller { 7 public function index() { 8 $this->assign('user','蠟筆小新'); 9 $this->display(); 10 } 11 }
因為這個模版是User,所以默認的則是在 View/User/index.html 顯示內容,所以在 View/User/index.html 中代碼為:
<html> <head> </head> <body> 傳過來的名字是{$user} </body> </html>
在瀏覽器中顯示的是:
PS:這個方法必須在 display()方法之前使用,保存變量正確傳遞。
渲染模版輸出使用的是 display 方法,有三個可選參數:
display([模版文件][,字符編碼][,輸出類型]);
如果不傳遞任何參數,它會按照默認的目錄定位模版的位置:
當前模塊/默認視圖目錄/當前控制器/當前操作.html
1 //修改默認模版 2 $this->display('add');
則這時調用的文件是: ./Weibo/Home/View/User/add.html
1 //修改默認模版,目錄加模版 2 $this->display('Bbb/add');
這時調用的文件是: ./Weibo/Home/View/Bbb/add.html
記得給Bbb/add加上單引號。
//修改默認模版,模塊加目錄加模版 $this->display('Admin@Bbb/add');
這時調用的文件是 ./WeiBo/Admin/View/Bbb/add.html
需要注意的是:Admin和Home是同級的, $this->display('Admin@Bbb/add'); 里沒有View,但是在Admin這個文件夾下,必須要建立View文件夾。Admin和Bbb/add.html中間是@符號。
1 //修改默認模版,主題加目錄加模版 2 $this->theme('blue')->display('Bbb/add');
調用的文件是: ./WeiBo/Home/View/blue/Bbb/add.html
1 //修改默認模版,自定義模版 2 $this->display('./Template/Public/add.html');
這時調用的文件是: ./ Template/Public/add.html Template文件與WeiBo文件同級,
需要注意的是,這時是不需要View文件夾的。
1 /修改默認模版,指定編碼和文件類型,一般不用填寫,默認即可 2 $this->display('add', 'utf-8', 'text/xml');
三. 模版地址
ThinkPHP 封裝了一個 T 函數,專門用于生成模版文件。格式如下:
T([資源://][模塊@][主題/][控制器/]操作,[視圖分層]);
1 //輸出當前模版地址 2 echo T();
這時輸出的為: ./WeiBo/Home/View/User/index.html
當然可以結合上面講的所有定義方法來自定義模版:
echo T('Public/add') 顯示的路徑為: ./WeiBo/Home/View/Public/add.html
echo T('Admin@index'); 顯示的路徑為: ./WeiBo/Admin/View/User/index.html
echo T('Admin@Public/add', 'Template'); 顯示的路徑為: ./WeiBo/Admin/Template/Public/add.html
也可以這樣:
1 //直接使用T函數輸出 2 $this->display(T());
四.獲取內容
如果需要獲取模版的內容,可以使用 fetch()方法,這個方法的使用和 display()方法一致。
1 //獲取模版里的內容 2 $content = $this->fetch(); 3 var_dump($content);
這時在 WeiBo/Home/View/User/index.html 中的代碼為:
1 <html> 2 <head> 3 </head> 4 5 <body> 6 這里是WeiBo/Home/View/User/index.html 7 </body> 8 </html>
在瀏覽器中調用 UserController.class.php 后,顯示為: string(87) " 這里是Home/View/User/index.html "
再在 Home/controller/UserController.class.php 中加入一行:
1 //通過內容再渲染輸出 2 $this->show($content);
則此時輸出的內容為:
文章列表