Thinkphp3.2中的模板繼承


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">&nbsp;</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__},則即使當前開啟布局模板,也不會進行布局模板解析。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM