ThinkPHP 3.1.2 新增: 模板繼承
模板繼承是一個好東西,模板繼承可以讓你的模板開發更加井然有序,特別適合較大專案的開發(不過移動時代,其實都比較趨向於輕便快捷而簡單的節奏,不過桌面版依然有比較多的元素部署),那麼來看一下這個模板繼承是怎麼應用的(其實官方的文件對這方面講述還是比較詳細的,以下只是簡單摘錄和排版)。
模板繼承其實並不難理解,就好比類的繼承一樣,模板也可以定義一個基礎模板(或者是佈局),並且其中定義相關的區塊(block),然後繼承(extend)該基礎模板的子模板中就可以對基礎模板中定義的區塊進行過載,因此,模板繼承的優勢其實是設計基礎模板中的區塊(block)和子模板中替換這些區塊。
每個區塊由標籤組成,並且不支援 block 標籤的巢狀,下面就是基礎模板中的一個典型的區塊設計(用於設計網站標題):
<block name="title"><title>網站標題</title></block>
block 標籤必須指定 name 屬性來標識當前區塊的名稱,這個標識在當前模板中應該是唯一的,block 標籤中可以包含任何模板內容,包括其他標籤和變數,例如:
<block name="title"><title>{$web_title}</title></block>
你甚至還可以在區塊中載入外部檔案:
<block name="include"><include file="Public:header" /></block>
一個模板中可以定義任意多個名稱標識不重複的區塊,例如下面定義了一個base.html基礎模板:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <block name="title"><title>標題</title></block> </head> <body> <block name="menu">選單</block> <block name="left">左邊分欄</block> <block name="main">主內容</block> <block name="right">右邊分欄</block> <block name="footer">底部</block> </body>
然後我們在子模板(其實是當前操作的入口模板)中使用繼承:
<extend name="base" /> <block name="title"><title>{$title}</title></block> <block name="menu"> <a href="/" >首頁</a> <a href="/info/" >資訊</a> <a href="/bbs/" >論壇</a> </block> <block name="left"></block> <block name="content"> <volist name="list" id="vo"> <a href="/new/{$vo.id}">{$vo.title}</a><br/> {$vo.content} </volist> </block> <block name="right"> 最新資訊: <volist name="news" id="new"> <a href="/new/{$new.id}">{$new.title}</a><br/> </volist> </block> <block name="footer"> @ThinkPHP2012 版權所有 </block>
可以看到,子模板中使用了 extend 標籤定義需要繼承的模板,extend 標籤的用法和 include 標籤一樣,你也可以載入其他模板:
<extend name="Public:base" />
或者使用絕對檔案路徑載入
在當前子模板中,只能定義區塊而不能定義其他的模板內容,否則將會直接忽略,並且只能定義基礎模板中已經定義的區塊。
例如,如果採用下面的定義:
<block name="title"><title>{$title}</title></block> <a href="/" >首頁</a> <a href="/info/" >資訊</a> <a href="/bbs/" >論壇</a>
導航部分將是無效的,不會顯示在模板中。
在子模板中,可以對基礎模板中的區塊進行過載定義,如果沒有重新定義的話,則表示沿用基礎模板中的區塊定義,如果定義了一個空的區塊,則表示刪除基礎模板中的該區塊內容。
<block name="left"></block>
上面的例子,我們就把left區塊的內容刪除了,其他的區塊都進行了過載。
子模板中的區塊定義順序是隨意的,模板繼承的用法關鍵在於基礎模板如何佈局和設計規劃了,如果結合原來的佈局功能,則會更加靈活。
相關文章
- java抽象繼承-模板方法Java抽象繼承
- 模板類的繼承問題繼承
- JSP模板繼承功能實現JS繼承
- odoo 繼承(owl繼承、web繼承、view繼承)Odoo繼承WebView
- Laravel框架模板之公共模板、繼承、包含實現方法分析Laravel框架繼承
- [提問交流]前臺模板繼承問題繼承
- 原型,繼承——原型繼承原型繼承
- 菱形繼承,虛繼承繼承
- 多繼承 與 多重繼承繼承
- C++繼承詳解:共有(public)繼承,私有(private)繼承,保護(protected)繼承C++繼承
- 三種繼承的方法:public 繼承/private繼承/protected繼承詳解及區別繼承
- Javascript繼承4:潔淨的繼承者—-原型式繼承JavaScript繼承原型
- Javascript繼承2:建立即繼承—-建構函式繼承JavaScript繼承函式
- 利用模板實現動態的繼承體系 (轉)繼承
- 繼承繼承
- C++繼承一之公有繼承C++繼承
- JS原型繼承和類式繼承JS原型繼承
- C++中公有繼承、保護繼承、私有繼承的區別C++繼承
- 公有繼承、私有繼承和保護繼承之間的對比繼承
- onethink自定義外掛 怎麼在模板裡面使用模板的繼承?繼承
- day23:單繼承&多繼承&菱形繼承&__init__魔術方法繼承
- 類的繼承_子類繼承父類繼承
- JavaScript繼承JavaScript繼承
- JavaScript 繼承JavaScript繼承
- 多繼承繼承
- Java繼承Java繼承
- javascript:繼承JavaScript繼承
- swift繼承Swift繼承
- js繼承JS繼承
- 虛繼承繼承
- 10 #### 繼承繼承
- THINKPHP 模板技術PHP
- 實驗4 類的組合、繼承、模板類、標準庫繼承
- python 基礎之繼承、重寫、多繼承Python繼承
- PostgreSQL 表繼承SQL繼承
- 16-繼承繼承
- 粗談繼承繼承
- 原型和繼承原型繼承