thinkphp學習3-模板與視圖

1.模板賦值php

若是要在模板中輸出變量,必須在在控制器中把變量傳遞給模板,系統提供了assign方法對模板變量賦值,不管何種變量類型都統一使用assign賦值。html

$this->assign('name',$value);
// 下面的寫法是等效的
$this->name = $value;

assign方法必須在display和show方法以前調用系統變量能夠經過特殊的標籤輸出,無需賦值模板變量。thinkphp

賦值後,就能夠在模板文件中輸出變量了,若是使用的是內置模板的話,就能夠這樣輸出: {$name}數據庫

若是要同時輸出多個模板變量,能夠使用下面的方式:函數

$array['name']    =    'thinkphp';
$array['email']   =    'liu21st@gmail.com';
$array['phone']   =    '12335678';
$this->assign($array);

這樣,就能夠在模板文件中同時輸出name、email和phone三個變量。fetch

 

2.模板渲染this

渲染模板輸出最經常使用的是使用display方法,調用格式: 編碼

   display('[模板文件]'[,'字符編碼'][,'輸出類型']) spa

模板文件的寫法支持下面幾種: code

// 不帶任何參數 自動定位當前操做的模板文件
$this->display();

系統按照默認規則自動定位模板文件,其規則是:

若是當前沒有啓用模板主題則定位到:當前模塊/默認視圖目錄/當前控制器/當前操做.html,若是有啓用模板主題則定位到:當前模塊/默認視圖目錄/當前主題/當前控制器/當前操做.html,一般默認的視圖目錄是View。


指定模板輸出,以下:

//調用當前控制器視圖目錄下的edit.html模板。
$this->display('edit');


調用其餘控制器視圖目錄下的模板,以下:

//調用Member控制器視圖目錄下的read.html模板
$this->display('Member:read');

渲染輸出不須要寫模板文件的路徑和後綴,確切地說,這裏面的控制器和操做並不必定須要有實際對應的控制器和操做,只是一個目錄名稱和文件名稱而已,例如,你的項目裏面可能根本沒有Public控制器,更沒有Public控制器的menu操做,可是同樣能夠使用 $this->display('Public:menu'); 輸出這個模板文件。

調用其餘模塊下的模板,以下:

$this->display("Login@Test:edit"); //若是當前模塊是Home,表示調用Login模塊下Test控制器視圖目錄下的edit.html模板。

display方法支持在渲染輸出的時候指定輸出編碼和類型,例如,能夠指定編碼和類型:

$this->display('read', 'utf-8', 'text/xml');

表示輸出XML頁面類型。編碼及類型是經過http響應頭中指定的:

image

 

事情總有特例,若是的模板目錄是自定義的,或者根本不須要按模塊進行分目錄存放,直接傳入模板文件名便可,例如:

$this->display('./Template/Public/menu.html');

這種方式須要指定模板路徑和後綴,這裏的Template/Public目錄是位於當前項目入口文件位置下面。若是是其餘的後綴文件,也支持直接輸出。

要注意模板文件位置是相對於項目的入口文件index.php,而不是模板目錄。


3.獲取模板地址

T函數用於生成模板文件名,用法:
    T([資源://][模塊@][主題/][控制器/]操做,[視圖分層])
T函數的返回值是一個完整的模板文件名,能夠直接用於display和fetch方法進行渲染輸出。

T('Public/menu');// 返回 當前模塊/View/Public/menu.html
T('blue/Public/menu');// 返回 當前模塊/View/blue/Public/menu.html
T('Admin@Public/menu');// 返回 Admin/View/Public/menu.html


// 在display方法中直接使用T函數輸出模板
$this->display(T('Admin@Public/menu'));

5.獲取內容

若是須要獲取渲染模板的輸出內容而不是直接輸出,能夠使用fetch方法。

模板文件的調用方法和display方法徹底同樣,區別就在於fetch方法渲染後不是直接輸出,而是返回渲染後的內容,例如:

$content = $this->fetch('Member:edit');

6.渲染內容

若是你沒有定義任何模板文件,或者把模板內容存儲到數據庫中的話,你就須要使用show方法來渲染輸出了,show方法的調用格式:

show('渲染內容'[,'字符編碼'][,'輸出類型'])

能夠指定編碼和類型: $this->show($content, 'utf-8', 'text/xml');

相關文章
相關標籤/搜索