模板
資料,頁面分離...資料傳給頁面,頁面只在相對應位置顯示資料....
對模板賦值和輸出
$this->assign('name',$value);或
$this->name = $value;
輸出
1.預設輸出 $this->display();
2.輸出當前模組其他動作模板
$this->display('user');
3.輸出其他模組的操作模板 $this->display('[分組名:]模組名:操作名');分組名是可選的,如果啟用了項目分組,沒有該參數那麼會以預設分組代替。
4.輸出其他主題的操作模板
$this->display('主題名@模組名:操作名');
5.全路徑輸出模板
$this->display('./Tpl/default/Index/index.html');
6.指定頁面編碼
$this->display('模板','編碼');
7.其他....
在頁面使用{$變數名稱}擷取資料
如果輸出的模板變數沒有值,但是我們需要在顯示的時候賦予一個預設值的話,可以使用 default
文法來預設顯示一個值。{$username|default="匿名"}
對模板變數使用函數{$變數|函數1|...|函數n=參數1,...,參數n,### }
{$webTitle|md5|strtoupper|substr=0,3},從左至右一次使用md5,轉大寫,取子字串..
如果變數或上函數執行的結果不是函數或下一個函數的第一個參數,那麼需要使用定位器“###”:
{$userinfo["regdate"]|date="Y-m-d H:i",###}
等效 echo date("y-m-d
H:i",$userinfo["regdate"]|);
模板檔案中還支援直接調用函數的快捷方法,無需通過模板變數,包括兩種方式:
{:say_hello('ThinkPHP')} //say_hello()為使用者自訂函數
,顯示傳回值
{~say_hello('ThinkPHP')} //say_hello()為使用者自訂函數,不顯示傳回值,只執行
輸出系統變數包括:server、session、post、get、request、cookie、env。系統變數的輸出不需要事先賦值給某個模板變數。系統變數的輸出以
$Think. 開頭,並且仍然支援使用函數。
{$Think.session.session_id|md5} //輸出 $_SESSION 變數並使用 md5
加密
//或簡寫為
{$_SESSION. session_id|md5}
//輸出$_GET變數
{$_GET.pageNumber}
使用$Think.const輸出系統常量。
{$Think.const.ACTION_NAME} //輸出 ThinkPHP 系統定義的常量
ACTION_NAME(當前操作名稱)
//或簡寫為
{$Think.ACTION_NAME}
使用 $Think.config 輸出項目的配置參數值
{$Think.config.DB_PREFIX}
輸出的值和 C('DB_PREFIX') 的返回結果是一樣的。
快捷輸出(不推薦使用////)
為了使得模板定義更加簡潔,系統還支援一些常用的變數輸出快捷標籤,包括:
- {@var} 與 {$Think.session.var} 等效,輸出 Session 變數
- {#var} 與 {$Think.cookie.var} 等效,輸出 Cookie 變數
- {&var} 與 {$Think.config.var} 等效,輸出配置參數
- {%var} 與 {$Think.lang.var} 等效,輸出語言變數
- {.var} 與 {$Think.get.var} 等效,輸出 GET 變數
- {^var} 與 {$Think.post.var} 等效,輸出 POST 變數
- {*var} 與 {$Think.const.var} 等效,輸出常量
模組包含
1.當前模組的其他模板操作檔案<include file="操作名"
/>
2.其他模組的操作模組
<include file="模組名:操作名" />
3.完整檔案名稱包含 <include
file="完整模板檔案名稱" />包含副檔名
4.包含其他主題的模組操作模版<include file="主題名@模組名:操作名"
/>
5.使用變數控制匯入模版
<include file="$變數名" />
6.捷徑
{include:模板檔案規則}......
模組匯入import和load關鍵字
匯入 javascript
檔案例子: <import
type='js' file="js.common" />
支援多個檔案大量匯入,以,號分開: <import type='js'
file="js.common,js.Util.Date" />
匯入 CSS
檔案例子:
<import type='css'
file="css.style" />
其起始置為Public目錄,設定basepath屬性<import file="js"
file="js.common" basepath="/Common" />
load 指令同 import 一致,用於匯入外部的 js 或 css 檔案等。
例子: <load href="/Public/js/common.js"
/><load href="/Public/css/style.css"
/>
在實際應用中,考量到模板的可讀性,建議使用 “傳統匯入+特殊模板標籤替換” 或 “load+特殊模板標籤替換” 的方式比較好。
囧
o(╯□╰)o
特殊字元串替換
ThinkPHP 系統定義了一些特殊的字串(常量)以方便在模板中的使用,這些特殊字元串給模板的應用帶來了極大的便利。
這些特殊的字串是在進行模板輸出之前有系統自動替換的,預設的模板特殊字元串如下:
- ../Public:當前項目的公用模板目錄,通常是 /項目目錄/Tpl/default/Public/
- __PUBLIC__:當前網站的公用目錄,通常是 /Public/
- __TMPL__:項目的模板目錄,通常是 /項目目錄/Tpl/default/
- __ROOT__:當前網站的地址(不含網域名稱)
- __APP__:當前項目的 URL 地址(不含網域名稱)
- __URL__:當前模組的 URL 地址(不含網域名稱)
- __ACTION__:當前操作的 URL 地址(不含網域名稱)
- __SELF__:當前的頁面 URL
ThinkPHP 支援使用者更改預設的替換規則甚至定義自己的模板替換特殊字元串。在項目設定檔中配置
TMPL_PARSE_STRING 選項以更改或增加模板替換字串,如:
TMPL_PARSE_STRING => array( '__PUBLIC__' => '/Common', // 更改預設的 __PUBLIC__ 替換規則 '__UPLOAD__' => '/Public/Uploads/', // 增加新的上傳路徑替換規則)
標籤
volist迴圈輸出標籤
1.如果要輸出結果集中的部分資料,需要指定 offset(資料指標) 與 length(資料資料條數) 屬性。
<volist name="list" id="vo" offset="5"
length='10'>
2.volist 中的 mod 參數相當於指定一個頻率,系統會將當前的實際記錄對 mod
參數值求餘(PHP中的%運算子)運算。而配合判斷標籤(如eq標籤),就可以按照頻率控制輸出的資料或資料顯示的格式。
<table>
<volist name="list" id="vo"
mod="2">
<tr<eq name="mod"
value="0">
style="background-color:#FFF;"</eq>>
<td>我是儲存格內容</td>
<td>我也是儲存格內容</td>
</tr>
</volist>
</table>
3.指定 key 屬性用於輸出迴圈的變數次數(注意不是資料表主鍵 id): 1,2,3,4,5,6,7
4.直接使用 $key 變數用於輸出數組索引:
<volist name="list" id="vo">
數組key:{$key}<br />
用 戶 名:{$vo['username']}<br />
電子郵件:{$vo['email']}<br />
註冊時間:{$vo['regdate']|date="Y-m-d H:i",###}
<hr />
</volist>
與輸出迴圈變數不同的是,這個 key 值取決於資料本身,而不是 volist 迴圈輸出決定的。
volist嵌套輸出多維陣列
foreach標籤
沒有volist標籤那麼多的功能,優勢是可以對對象進行遍曆輸出,而volist標籤通常是用於輸出數組。
<foreach name="list" id="vo">
用 戶 名:{$vo.username}<br />
電子郵件:{$vo.email}<br />
註冊時間:{$vo.regdate|date="Y-m-d H:i",###}
<hr />
</foreach>
switch標籤
ThinkPHP 模板引擎支援 switch 判斷,根據不同情況輸出不同的值,格式如下:
<switch name="變數名" >
<case
value="值1">輸出內容1</case>
<case
value="值2">輸出內容2</case>
<default
/>預設情況
</switch>
case 的 value 屬性可以支援多個條件的同時判斷,使用 | 符號進行分割:
<witch name="_GET.type">
<case
value="gif|png|jpeg">映像格式檔案</case>
<default />其他格式檔案
</switch>
判斷輸出比較標籤
<比較標籤 name="變數名"
value="值">輸出的內容</比較標籤>
<eq name="username"
value="admin">管理員</eq>
同其他標籤一樣,name 屬性值是變數名,不需要 $ 符號,而當 value 屬性使用變數時需要 $ 符號:
<eq name="uid"
value="$adminId">管理員</eq>
比較標籤支援與 else 標籤混合使用: <eq name="username"
value="admin">管理員<else/>群眾</eq>
判斷變數,常量是否賦值
present 標籤用來判斷模板變數是否已經賦值,相當於 PHP 中的 isset() 函數行為
對應的還有個 notpresent 標籤,為 present 標籤的反義(即 !isset() ):
<notpresent
name="username">username
變數還沒有賦值</notpresent>
<present name="username">username
變數已經賦值<else />username
變數還沒有賦值</present>
defined 標籤用來判斷常量是否已經被定義,相當於 PHP 中的 defined() 函數行為。對應的還有個
notdefined 標籤
empty 標籤用來判斷模板變數是否為空白值,相當於 PHP 中的 empty() 函數行為.
<empty
name="變數名">要輸出的內容</empty>
對應的還有個 notempty 標籤,
範圍判斷
in 標籤用於某個模板變數是否在某個範圍之內,格式如下:
<in name="變數名"
value="值1,值2,...">要輸出的內容</in>
對應的還有個 notin 標籤,為 in 標籤的反義
in 和 notin 標籤也可以使用 range 標籤來替代:
<range name="groupId" value="1,2,3" type="in"
>管理群組</range>
上面的例子相當於 in 標籤,當 type 屬性的值為 notin 時就相當於 notin 標籤。
判斷輸出if...else
<if
condition="expr1">輸出的內容1
<elseif condition="expr2"
/>輸出的內容2
<else />輸出的內容3
</if>
<if condition="($vo['uid'] eq 1) OR ($vo['username']
eq 'admin') ">管理員
<elseif condition="$vo['uid'] gt 1"
/>群眾
<else />遊客
</if>
同資料庫操作中的運算式一樣,條件判斷中的運算式不能使用普通的如
==、>、< 等 PHP比較子 中的判斷符號,而需要 ThinkPHP 特定的比較標籤:
condition 條件支援對數組、對象的判斷以及自動判斷數組或對象:
// 數組形式
<if condition="$vo['uid'] eq
1">
// 對象形式
<if condition="$vo:uid eq 1">
// 自動判斷
<if condition="$vo.uid eq 1">
condition 屬性裡面還支援直接使用php代碼,例如:
<if condition="strtoupper($vo['username']) eq
'ADMIN' ">管理員
<else />群眾
</if>
tips:
- 在判斷輸出系欄標籤中,應儘可能使用更為簡潔的比較標籤和
switch
標籤等判斷標籤。
- 如果 ThinkPHP 提供的各判斷標籤仍不能滿足特殊的需求,可以直接使用原生 PHP 代碼或者 PHP
標籤來滿足需求。