文章出處

視圖是 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);

則此時輸出的內容為:

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()