一、包含文件
在一個系統中,可以包含通用的頭文件和腳文件:header 和 footer。由于每個頁面
的頭腳都是相同的,所以需要獨立分離出來,再用包含文件引入他們。
我們可以在 View 目錄下 default 主題目錄下創建一個 public 目錄,這個目錄專門存
放公共調用模版文件。
我們在 View/default/User/index.html 寫入的代碼為:
1 <include file="Public/header" /> 2 3 這里是內容 4 5 <include file="Public/footer" />
當然也可以調用絕對路徑 <include file='./Weibo/Home/View/default/Public/header.tpl' />
然后在 View/default/Public/header.html 內填入的代碼為:
1 <html> 2 <head> 3 </head> 4 <body> 5 <div class='header' >這里是頭部</div>
在 View/default/Public/header.html 里寫入的代碼為:
1 <div class='footer'>這里是底部</div> 2 </body> 3 </html>
最后在瀏覽器中顯示為:
同時調用多個模版文件: <include file='Public/header,Public/footer' /> ,這時,header.html和footer.html的內容是顯示在一起的
二.模版注釋
1 {//這是注釋} 2 {/*這也是注釋*/} 3 {/*這是 4 多行注釋*/}
三. 模版繼承
模版繼承是一項靈活的模版布局方式,它類似于子類繼承父類,然后子類還可以進行適
當的修改以滿足當前頁面的需要。
這時,在Public文件夾下新建base.html,寫入以下代碼:
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title><block name="title">這里是base的標題</block></title> 5 </head> 6 <body> 7 <include file="public/header" /> 8 <block name="main">主要內容</block> 9 <include file="public/footer" /> 10 </body> 11 </html>
這時,這里的 public/header 只寫 <div class='header' >這里是頭部</div> ,不用加上<html>這些標簽了,因為base.html已經寫了。兩個都寫就重復了。
footer.html也是同樣的道理。
然后在 View/User/index.html 中開始調用繼承base.html了
1 <extend name='public/base'/> 2 <block name="title">這里改成自己的標題</block> 3 <block name="main">這里直接寫內容</block>
這里用 extend 來繼承,然后用 block 標簽來改變需要改變的內容,記住在 base.html 中的 block 標簽是必須要加上 name 的,要不然在需要繼承的
文件里就無法做相應的修改了。
這時,瀏覽器中顯示為:
四、模版布局
ThinkPHP 的模版引擎內置了布局模版功能支持,可以方便實現模版布局以及布局嵌套
功能。有三種布局方式:
1.全局配置方式
在 WeiBo/Common/Conf/config.php 中插入以下配置:
1 'LAYOUT_ON'=>true, 2 'LAYOUT_NAME'=>'Public/layout',
然后在 View/Public/layout.html 中寫入以下代碼:
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title>這里是標題</title> 5 </head> 6 <body> 7 <include file="public/header" /> 8 {__CONTENT__} 9 <include file="public/footer" /> 10 </body> 11 </html>
這時直接在 View/User/index.html 下寫 這里是user文件 ,
瀏覽器顯示為:
也就是 View/User/index.html 中的‘這里是user文件’是 View/Public/layout.html 中的 {__CONTENT__} ,如果不用 {__CONTENT__} ,也可以在 WeiBo/Common/Conf/config.php 中寫入 'TMPL_LAYOUT_ITEM' =>'{__REPLACE__}', 這時,以后就可以用 {__REPLACE__} 代替 {__CONTENT__} 了。
這時在 View/User/index.html 下任意建立一個文件,寫上內容,就會直接調用 View/Public/layout.html 內的內容,然后加上在該文件中的寫入的內容一起輸出
子模版不需要載入模版基頁,可以在開頭加上{__NOLAYOUT__},
也就是在 View/User/ 下建立的文件,如果不想調用 Public/layout.html 里的內容,就可以在 View/User/ 下建立的文件中加上:
1 {__NOLAYOUT__}
這時就只顯示該文件里寫入的內容,而不再繼承 Public/layout.html 的內容了。
2.模版標簽方式
標簽方式,并不需要在系統做任何配置,和模版繼承類似,直接引入即可。
也就是不需要在 WeiBo/Common/Conf/config.php 里加上:
1 'LAYOUT_ON'=>true, 2 'LAYOUT_NAME'=>'Public/layout',
直接在子模版下建立的文件中寫入:
1 <layout name="Public/layout" />
一定要注意,最后的/>里的/一定要記得寫,不然就不能引入該模版了
如果要替換掉 {__CONTENT__} ,則寫成:
1 //替換變量的方法 2 <layout name="Public/layout" replace="{__REPLACE__}" />
3.layout 控制布局
這個方法是在控制器里操作的。
在 Home/controller/UserController.class.php 中寫入:
1 class UserController extends Controller { 2 public function index() { 3 layout('Public/layout'); 4 $this->display(); 5 } 6 7 }
這里說明一下,function里的 $this->display(); 一定要寫啊,沒寫的話 View/User/index.html 根本就沒有任何輸出啊。
如果是 layout( true); 是引入默認地址基頁,但是我刷新總是什么也沒有,這個就算了,以后按照 layout('Public/layout'); 這樣寫好了,還安全有保障。
1 public function index() { 2 layout('Public/layout'); 3 //layout(false); //關閉 4 $this->display() 5 }
九.模版替換
在模版渲染之前,系統還會對讀取的模版內容進行一些特殊字符串替換操作,也就實現
了模版輸出的替換和過濾。這里的替換其實也就是在瀏覽器中輸出的意思。
在 View/User/index.html 中輸入:
__ROOT__: 會替換成當前網站的地址(不含域名)
__APP__: 會替換成當前應用的 URL 地址 (不含域名)
__MODULE__:會替換成當前模塊的 URL 地址 (不含域名)
__CONTROLLER__(或者__URL__ 兼容考慮): 會替換成當前控制器的 URL 地址(不含域名)
__ACTION__:會替換成當前操作的 URL 地址 (不含域名)
__SELF__: 會替換成當前的頁面 URL
__PUBLIC__:會被替換成當前網站的公共目錄 通常是 /Public/
在 WeiBo/Common/Conf/config.php 中增加以下代碼:
1 'TMPL_PARSE_STRING' => array( 2 '__PUBLIC__' => '/Common', // 更改默認的/Public 替換規則 3 '__UPLOAD__' => '/Uploads', // 增加新的上傳路徑替換規則 4 )
然后在 View/User/index.html 中輸入 __PUBLIC__ ,在瀏覽器中輸出為: /Common
PS:__PUBLIC__可以改成--PUBLIC--同樣的也可以。
文章列表