一.變量輸出
在模版中輸出變量是很是容易的,使用assign()方法,以鍵值對的方式傳遞變量和值。
//給模版傳遞一個變量
$user='新';
$this->assign('user',$user);
在模版中能夠這麼調用:
{$user}
模版編譯後的結果是:
<?phpecho($user);?> //能夠在Runtime能夠查看
模版標籤{和$之間不能用任何空格,不然沒法解析。若是你想更換兩個{}能夠設置:
//修改默認標籤
'TMPL_L_DELIM'=>'<{',
'TMPL_R_DELIM'=>'}>',
調用方式就必須改變:
<{$user}>
若是傳遞一個數組,咱們直接傳遞過去後,經過兩種方式調用:
//給模版傳遞一個數組
$data['user']='新';
$data['email']='bbs@163.com';
$this->assign('data',$data);
調用方式爲:
User:{$data.user}Email:{$data.email}
User:{$data['user']}Email:{$data['email']}
若是傳遞一個對象,咱們直接傳遞過去後,經過兩種方式調用:
//給模版傳遞一個對象
$data=new\stdClass();
$data->user='新';
$data->email='bbs@163.com';
$this->assign('data',$data);
調用方式爲:
User:{$data->user}Email:{$data->email}
User:{$data:user}Email:{$data:email}
二.系統變量
在模版中,不但能夠輸出PHP的系統變量,還能夠輸出ThinkPHP的系統變量。
//輸出PHP系統變量
{$Think.server.script_name} //$_SERVER['SCRIPT_NAME']
{$Think.session.admin} //$_SESSION['admin']
{$Think.get.user} //$_GET['user']
{$Think.post.user} //$_POST['user']
{$Think.request.user} //$_REQUEST['user']
{$Think.cookie.name} //$_COOKIE['name']
//ThinkPHP的系統變量
{$Think.const.APP_PATH} //目錄
{$Think.config.url_model} //URL模式
{$Think.lang.var_error} //語言變量
三.使用函數
若是有時,咱們須要在模版中使用PHP函數的話,能夠按照下面的格式使用:
{$user|md5}
若是有多個參數要傳遞,能夠參考以下設置:
{$date|date="Y-m-dH:i:s",###}
PS:表示date函數傳入兩個參數,每一個參數用逗號分割,這裏第一個參數是Y-m-d
H:i:s,第二個參數是前面要輸出的date變量,由於該變量是第二個參數,所以須要用###
標識變量位置,編譯後的結果是:
<?phpecho(date($date,"Y-m-dH:i:s"));?>
前面輸出變量,在後面定義,則不須要###
{$user|mb_substr=0,3,'UTF-8'}
多個函數用"|"隔開便可
{$user|mb_substr=0,3,'UTF-8'|md5|sha1}
PS:若是你以爲以上寫法須要在腦海裏二次翻譯,太過於麻煩,那麼能夠用如下的格
式寫法:
{:md5(mb_substr($user,0,3,'UTF-8'))}
PS:我我的認爲把這些數據處理,都儘量不要模版端,除非是必須在模版端才能處
理的。由於模版就是爲了HTML和JS,而後就是提供數據,不要包含各類過濾和業務邏輯。
當傳遞過來的變量若是沒有值的時候,模版提供了默認值輸出功能。
{$user|default='什麼都沒有!'}
四.使用運算符
咱們能夠在模版中使用運算符,包括對「+」、「-」、「*」、「/」、「%」、「--」和「++」的
支持。
{$data['num']+10} //中括號
{$data['num']+getNum()} //函數
PS:在使用運算符的時候,再也不支持語法和常規的函數用法:
{$data.num+10} //錯誤的
{$data['num']+getNum} //錯誤
模版還支持三元運算符:
{$user?'有值':'無值'}
五.包含文件
在一個系統中,能夠包含通用的頭文件和腳文件:header和footer。因爲每一個頁面
的頭腳都是相同的,因此須要獨立分離出來,再用包含文件引入他們。
咱們能夠在View目錄下default主題目錄下建立一個public目錄,這個目錄專門存
放公共調用模版文件。
<includefile='Public/header'/>
<includefile='Public/footer'/>
也能夠調用絕對路徑模式:
<includefile='./Weibo/Home/View/default/Public/header.tpl'/>
同時調用多個模版文件:
<includefile='Public/header,Public/footer'/>
六.模版註釋
模版支持註釋功能,提供個模版製做人員參考。
{//這是註釋}
{/*這也是註釋*/}
{/*這是
多行註釋*/}
七.模版繼承
模版繼承是一項靈活的模版佈局方式,它相似於子類繼承父類,而後子類還能夠進行適
當的修改以知足當前頁面的須要。
//基礎模版須要子模版修改的部分能夠用<block>包含,而且設置name值
<blockname="main">主要內容</block>
//子模版只要按一樣的方法,修改<block>內部的值便可完成修改
<blockname="main">修改了</block>
//建立Public下base.tpl模版基頁
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<blockname="title"><title>{$user}</title></block>
</head>
<body>
<includefile="Public/header"/>
<blockname="main">主要內容</block>
<includefile="Public/footer"/>
</body>
</html>
//使用<extend>導入模版基頁,name爲路徑,和include導入方法一致
<extendname="Public/base"/>
<blockname="main">修改了</block>
八.模版佈局
ThinkPHP的模版引擎內置了佈局模版功能支持,能夠方便實現模版佈局以及佈局嵌套
功能。有三種佈局方式:
1.全局配置方式
//開啓模版佈局功能,並指定基礎頁
'LAYOUT_ON'=>true,
'LAYOUT_NAME'=>'Public/layout', //layout.tpl文件
//基礎頁,{__CONTENT__}將被子頁面的內容替換
<includefile="Public/header"/>
{__CONTENT__}
<includefile="Public/footer"/>
//替換變量能夠變動爲{__REPLACE__}
'TMPL_LAYOUT_ITEM'=>'{__REPLACE__}',
//子模版不須要載入模版基頁,能夠在開頭加上{__NOLAYOUT__}
{__NOLAYOUT__}
2.模版標籤方式
標籤方式,並不須要在系統作任何配置,和模版繼承相似,直接引入便可。
//子模版引入模版基頁
<layoutname="Public/layout"/>
//替換變量的方法
<layoutname="Public/layout"replace="{__REPLACE__}"/>
3.layout控制佈局
這個方法是在控制器裏操做的。
//開啓佈局,並引入默認地址基頁
publicfunctionindex(){
layout(true);
}
//引入指定基頁
publicfunctionindex(){
layout('Public/layout');
//layout(false); //關閉
}
九.模版替換
在模版渲染以前,系統還會對讀取的模版內容進行一些特殊字符串替換操做,也就實現
了模版輸出的替換和過濾。
__ROOT__:會替換成當前網站的地址(不含域名)
__APP__:會替換成當前應用的URL地址(不含域名)
__MODULE__:會替換成當前模塊的URL地址(不含域名)
__CONTROLLER__(或者__URL__兼容考慮):會替換成當前控制器的URL地址(不
含域名)
__ACTION__:會替換成當前操做的URL地址(不含域名)
__SELF__:會替換成當前的頁面URL
__PUBLIC__:會被替換成當前網站的公共目錄一般是/Public/
'TMPL_PARSE_STRING' =>array(
'__PUBLIC__'=>'/Common',//更改默認的/Public替換規則
'__UPLOAD__'=>'/Uploads',//增長新的上傳路徑替換規則
)
PS:__PUBLIC__能夠改爲--PUBLIC--一樣的也能夠。php