1:模板繼承:
是3.1.2版本添加的一項更加靈活的模板布局方式,模板繼承不同於模板布局,甚至來說,應該在模板布局的上層。模板繼承其實並不難理解,就好比 類的繼承一樣,模板也可以定義一個基礎模板(或者是布局),並且其中定義相關的區塊(block),然后繼承(extend)該基礎模板的子模板中就可以 對基礎模板中定義的區塊進行重載。
因此,模板繼承的優勢其實是設計基礎模板中的區塊(block)和子模板中替換這些區塊。
每個區塊由標簽組成,並且不支持block標簽的嵌套。
例如下面是基礎模板中的一個典型的區塊設計,一般用於設計網站標題:
1 <block name="title"><title>標題</title></block>
block標簽必須指定name屬性來標識當前區塊的名稱,這個標識在當前模板中應該是唯一的,block標簽中可以包含任何模板內容,包括其他標簽和變量,例如:
1 <block name="title"><title>{$web_title}</title></block>
當然你也可以在外部加載文件
1 <block name="include"><include file="Public:header" /></block
然后我們在子模板(其實是當前操作的入口模板)中使用繼承:
使用的時候則是:
<extend name="Public/index"/> <block name="content"> <link href="__STATIC__/SmohanTimeLine/css/smohan.timeline.css" rel="stylesheet" type="text/css" media="all"> <style> .item{cursor: pointer;} </style> <div id="index-div"> <div class="lines"> </div> <div class="item" > <div class="item-wraper" value='http://www.cnblogs.com/zyf-zhaoyafei/p/4486220.html' style="padding:20px 15px;"> <img src="__UPLOAD__/Special/19056051036.jpg"> <p class='disprition'>Git是目前世界上最先進的分布式版本控制系統</p> </div> </div> </div> </block> <block name="script"> <script type="text/javascript" src="__STATIC__/SmohanTimeLine/js/smohan.timeline.min.js"></script> <script type="text/javascript"> $(window).load(function(){ $(window).bind('resize',function(){ }).resize(); }); </script> </block>
extend 中的name與block中的name一致
在子模板中,可以對基礎模板中的區塊進行重載定義,如果沒有重新定義的話,則表示沿用基礎模板中的區塊定義,如果定義了一個空的區塊,則表示刪除基礎模板中的該區塊內容。子模板中的區塊定義順序是隨意的,模板繼承的用法關鍵在於基礎模板如何布局和設計規划了,如果結合原來的布局功能,則會更加靈活。
2:模板布局
需在項目配置文件中添加相關的布局模板配置,就可以簡單實現模板布局功能,比較適用於全站使用相同布局的情況,需要配置開啟LAYOUT_ON 參數(默認不開啟),並且設置布局入口文件名LAYOUT_NAME(默認為layout)。
1 'LAYOUT_ON'=>true, 2 'LAYOUT_NAME'=>'layout',
開啟LAYOUT_ON后,我們的模板渲染流程就有所變化,例如:
1 namespace Home\Controller;use 2 Think\Controller; 3 Class UserController extends Controller{ 4 Public function add() { 5 $this->display('add'); 6 } 7 }
在不開啟LAYOUT_ON布局模板之前,會直接渲染 Application/Home/View/User/add.html
模板文件,開啟之后,首先會渲染Application/Home/View/layout.html
模板,布局模板的寫法和其他模板的寫法類似,本身也可以支持所有的模板標簽以及包含文件,區別在於有一個特定的輸出替換變量{__CONTENT__}
,例如,下面是一個典型的layout.html模板的寫法:
1 <include file="Public:header" /> 2 {__CONTENT__} 3 <include file="Public:footer" />
如果某些頁面不需要使用布局模板功能,可以在模板文件開頭加上 {__NOLAYOUT__}
字符串。
如果上面的User/add.html 模板文件里面包含有{__NOLAYOUT__}
,則即使當前開啟布局模板,也不會進行布局模板解析。