【小(xiǎo)編推薦】ThinkPHP3.2♥•♣∞——模闆繼承

2014-06-26  &n¶₹₽bsp;|   發布者:梁國≤ (guó)芳   |  &n​↔γbsp;查看(kàn):3320次

Thinkphp

模闆繼承是(shì)一(yī)項更加靈活的(de)模闆布局方式,模闆繼♠☆φ★承不(bù)同于模闆布局,甚至來(lái)說(shuō),應該在模闆​☆♣£布局的(de) 上(shàng)層。模闆繼承其實并不(bù)難ε¶π>理(lǐ)解,就(jiù)好(hǎo)比類的(de)繼承一(yī)樣α≤✘,模闆也(yě)可(kě)以定義一(yī)個(gè)基礎模闆(或者是   ≥(shì)布局),并且其中定義相(xiàng)關的(de)區(qū)塊(b↓¶©lock),然後繼承 (extend)該基礎模&↑ε闆的(de)子(zǐ)模闆中就(jiù)可(kě)以 ®≠對(duì)基礎模闆中定義的(de)區(qū)塊進行(xín♥  ¥g)重載。

因此,模闆繼承的(de)優勢其實是(shì)設計(jì)基礎模闆∏<中的(de)區(qū)塊(block)和(hé)子 ®↑↓(zǐ)模闆中替換這(zhè)些(xiē)區(qū)塊。

每個(gè)區(qū)塊由<block></block>$ ×标簽組成。 下(xià)面就(jiù)是(shì)基礎模闆中的(de)§¶‍一(yī)個(gè)典型的(de)區(qū)塊設計(jì÷₩₩ )(用(yòng)于設計(jì)網站(zhàn)标題):

  1. <block name="title"><title>網站(zhàn)标題</title></block>

block标簽必須指定name屬性來(lái)标識當前區(qū☆∑)塊的(de)名稱,這(zhè)個(gè)标識在當前模闆中應該是(sh§↔§ì)唯一(yī)的(de),block标簽中可(kě)以包含任何模闆內(♥ ↑≤nèi)容,包括其他(tā)标簽和(hé)變量,例如(r ‌¥∏ú):

  1. <block name="title"><title>{$web_title}</title></block>

你(nǐ)甚至還(hái)可(kě)以在區(qū)塊中加載&α外(wài)部文(wén)件(jiàn):

  1. <block name="include"><include file="Public:header" /></block>

一(yī)個(gè)模闆中可(kě)以定義任意多(duō)個(g±<£βè)名稱标識不(bù)重複的(de)區(qū)塊,例如(rú)♥©下(xià)面定義了(le)一(yī)個(gè)base.html基礎模闆:

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8&q‍≤&™uot;>
  4. <block name="title"><title>标題</title></bloc♥γk>
  5. </head>
  6. <body>
  7. <block name="menu">菜單</block>
  8. <block name="left">左邊分(fēn)欄</block>
  9. <block name="main">主內(nèi)容</block>
  10. <block name="right">右邊分(fēn)欄</block>
  11. <block name="footer">底部</block>
  12. </body>
  13. </html>

然後我們在子(zǐ)模闆(其實是(shì)當前操作(zuò)的(de)入口模 γ闆)中使用(yòng)繼承:

  1. <extend name="base" />
  2. <block name="title"><title>{$title}</title></b§≠lock>
  3. <block name="menu">
  4. <a href="/" >首頁</a>
  5. <a href="/info/" >資訊</a>
  6. <a href="/bbs/" >論壇</a>
  7. </block>
  8. <block name="left"></block>
  9. <block name="content">
  10. <volist name="list" id="vo">
  11. <a href="/new/{$vo.id}"εβ€÷;>{$vo.title}</a><br/>
  12. {$vo.content}
  13. </volist>
  14. </block>
  15. <block name="right">
  16. 最新資訊:
  17. <volist name="news" id="new">
  18. <a href="/new/{$new.id}">{$new.title}</a><br/>
  19. </volist>
  20. </block>
  21. <block name="footer">
  22. @太原博創科技開發有限公司 版權所有(yǒu)
  23. </block>

可(kě)以看(kàn)到(dào),子(zǐ)模闆中≠•↓使用(yòng)了(le)extend标簽<δ 定義需要(yào)繼承的(de)模闆,extend标簽的(de)用(§₹‍&yòng)法和(hé)include标簽一∑∑↔(yī)樣,你(nǐ)也(yě)可(kě)以♥★•¶加載其他(tā)模闆:

  1. <extend name="Public:base" />

或者使用(yòng)絕對(duì)文(wén)件(jiàn)路(l< ù)徑加載

  1. <extend name="./Template/Public/base.html"£↕α☆; />

在當前子(zǐ)模闆中,隻能(néng)定義區(qū≠♠↑δ)塊而不(bù)能(néng)定義其他(tā)的≈​÷☆(de)模闆內(nèi)容,否則将會(huì)直接忽略,并且隻能(néng)• •✔定義基礎模闆中已經定義的(de)區(qū)塊。

例如(rú),如(rú)果采用(yòng)下(xià)λ&面的(de)定義:

  1. <block name="title"><title>{$title}</title></block$γ>
  2. <a href="/" >首頁</a>
  3. <a href="/info/" >資訊</a>
  4. <a href="/bbs/" >論壇</a>

導航部分(fēn)将是(shì)無效的(de),不(bù)會(huì)‍ <顯示在模闆中。

在子(zǐ)模闆中,可(kě)以對(duì)基礎模闆中> 的(de)區(qū)塊進行(xíng)重載定義,如(rú)果沒有"₽(yǒu)重新定義的(de)話(huà),則表示沿用(yòng)基礎→∑←模闆中的(de)區(qū)塊定義,如(rú)果定義了(le)一(yī)個(gè ✘)空(kōng)的(de)區(qū)塊,則表示删除基礎模闆中的(d↕✔e)該區(qū)塊內(nèi)容。 上(shàn£πφ©g)面的(de)例子(zǐ),我們就(jiù)把l★$"✘eft區(qū)塊的(de)內(nèi)容删除了(le),其他(tā)的(d≤ελ¥e)區(qū)塊都(dōu)進行(xín™₽♠ g)了(le)重載。

子(zǐ)模闆中的(de)區(qū)塊定義順序是(shì)随意的(de),≈←α∏模闆繼承的(de)用(yòng)法關鍵在于基礎模闆如(rú)何布局和(hé)設♣§計(jì)規劃了(le),如(rú)果結合原來(lái)₽λ©π的(de)布局功能(néng),則會(huì)更加靈活。​∞↕↕