標簽庫
內置(zhi)的(de)模(mo)板引擎除了支持普通變量的(de)輸出之外,更強大的(de)地(di)方在于標簽庫功能。
標(biao)(biao)簽(qian)(qian)(qian)庫(ku)類似(si)于Java的(de)Struts中的(de)JSP標(biao)(biao)簽(qian)(qian)(qian)庫(ku),每(mei)一個標(biao)(biao)簽(qian)(qian)(qian)庫(ku)是一個獨(du)立的(de)標(biao)(biao)簽(qian)(qian)(qian)庫(ku)文件,標(biao)(biao)簽(qian)(qian)(qian)庫(ku)中的(de)每(mei)一個標(biao)(biao)簽(qian)(qian)(qian)完(wan)成某個功能(neng),采用XML標(biao)(biao)簽(qian)(qian)(qian)方式(包括開放標(biao)(biao)簽(qian)(qian)(qian)和閉合(he)標(biao)(biao)簽(qian)(qian)(qian))。
標簽庫分為內置和擴展標簽庫,內置標簽庫是Cx標簽庫。
導入標簽庫
使(shi)用taglib標簽(qian)導入當前模板中(zhong)需要使(shi)用的標簽(qian)庫,例如:
{taglib name="html" /}
如果沒有(you)定義html標簽(qian)庫的(de)話(hua),則導入無效。
也(ye)可以導入多個(ge)標簽庫(ku),使用(yong):
{taglib name="html,article" /}
導入標(biao)(biao)簽(qian)庫(ku)后,就可(ke)以使(shi)用標(biao)(biao)簽(qian)庫(ku)中定(ding)義(yi)(yi)的標(biao)(biao)簽(qian)了,假設article標(biao)(biao)簽(qian)庫(ku)中定(ding)義(yi)(yi)了read標(biao)(biao)簽(qian):
{article:read name="hello" id="data" }
{$data.id}:{$data.title}
{/article:read}
在上面的標簽中,{article:read}... {/article:read} 就是閉合標簽,起始和結束標簽必須成對出現(xian)。
如果是 {article:read name="hello" /} 就是開放標簽(qian)。
閉合和開放(fang)標簽取決于標簽庫(ku)中(zhong)的定(ding)義,一旦(dan)定(ding)義后就(jiu)不能混(hun)淆使用,否則就(jiu)會出現錯(cuo)誤。
內置標簽
內(nei)置標簽(qian)庫(ku)(ku)無需導入即可(ke)使(shi)(shi)用(yong),并且不(bu)需要(yao)加XML中(zhong)的標簽(qian)庫(ku)(ku)前綴,ThinkPHP內(nei)置的標簽(qian)庫(ku)(ku)是Cx標簽(qian)庫(ku)(ku),所(suo)以,Cx標簽(qian)庫(ku)(ku)中(zhong)的所(suo)有標簽(qian),我們(men)可(ke)以在模板文(wen)件中(zhong)直(zhi)接使(shi)(shi)用(yong),我們(men)可(ke)以這樣使(shi)(shi)用(yong):
{eq name="status" value="1" }
正常
{/eq}
如果Cx不(bu)是內置標簽的話,可(ke)能(neng)就需要這(zhe)么使用了:
{cx:eq name="status" value="1" }
正常
{/cx:eq}
更多的Cx標簽庫中的標簽用法,參考(kao)。
內置(zhi)標簽(qian)庫(ku)可(ke)以(yi)簡化(hua)模板中標簽(qian)的(de)使用,所以(yi),我們還(huan)可(ke)以(yi)把其他(ta)的(de)標簽(qian)庫(ku)定義為內置(zhi)標簽(qian)庫(ku)(前提是(shi)多個標簽(qian)庫(ku)沒有標簽(qian)沖突(tu)的(de)情(qing)況),例如:
'taglib_build_in' => 'cx,article'
配置后(hou),上(shang)面(mian)的標簽用(yong)法就可以改為(wei):
{read name="hello" id="data" }
{$data.id}:{$data.title}
{/read}
標簽庫預加載
標(biao)(biao)簽(qian)庫(ku)預加載是指無需手(shou)動(dong)在(zai)模板文(wen)件(jian)中導入(ru)標(biao)(biao)簽(qian)庫(ku)即可使(shi)(shi)用標(biao)(biao)簽(qian)庫(ku)中的(de)標(biao)(biao)簽(qian),通常用于某(mou)個標(biao)(biao)簽(qian)庫(ku)需要被(bei)大多(duo)數模板使(shi)(shi)用的(de)情況。
在應用或者模塊的配置文件中(zhong)添加:
'taglib_pre_load' => 'article,html'
設(she)置后,模板文件就不再需要使用
{taglib name="html,article" /}
但(dan)是仍然可(ke)以(yi)在模板中(zhong)調用:
{article:read name="hello" id="data" }
{$data.id}:{$data.title}
{/article:read}
