SWITCH標簽
用法:
{switch name="變量(liang)" }
{case value="值1" break="0或1"}輸出內容1{/case}
{case value="值2"}輸出內容2{/case}
{default /}默認情況
{/switch}
使用方法如(ru)下(xia):
{switch name="User.level"}
{case value="1"}value1{/case}
{case value="2"}value2{/case}
{default /}default
{/switch}
其中name屬性可(ke)以使(shi)用(yong)函(han)數以及系統變量,例(li)如:
{switch name="Think.get.userId|abs"}
{case value="1"}admin{/case}
{default /}default
{/switch}
對于case的value屬性可以(yi)支(zhi)持多個(ge)條(tiao)件的判斷,使用(yong)”|”進(jin)行分割(ge),例(li)如:
{switch name="Think.get.type"}
{case value="gif|png|jpg"}圖像格式{/case}
{default /}其他格式
{/switch}
表示如(ru)果(guo)$_GET["type"] 是gif、png或者jpg的話,就判斷為圖像格式。
Case標(biao)簽還有(you)一個break屬性,表示是否需要(yao)break,默認是會自動添加break,如果不要(yao)break,可(ke)以使用(yong):
{switch name="Think.get.userId|abs"}
{case value="1" break="0"}admin{/case}
{case value="2"}admin{/case}
{default /}default
{/switch}
也可以(yi)對case的(de)value屬性使用變(bian)量,例如(ru):
{switch name="User.userId"}
{case value="$adminId"}admin{/case}
{case value="$memberId"}member{/case}
{default /}default
{/switch}
使(shi)用變量方式的情(qing)況下,不再支持多個條(tiao)件的同(tong)時判斷(duan)。
簡潔的用法
{switch $User.userId}
{case $adminId}admin{/case}
{case $memberId}member{/case}
{/switch}
IF標簽
用法示例:
{if condition="($name == 1) OR ($name > 100) "} value1
{elseif condition="$name eq 2"/}value2
{else /} value3
{/if}
除此之外,我們可以在condition屬性(xing)里面使用php代碼,例如:
{if condition="strtoupper($user['name']) neq 'THINKPHP'"}ThinkPHP
{else /} other Framework
{/if}
condition屬性可以支持點語法和對象語法,例如: 自(zi)動判斷(duan)user變量是(shi)數組還是(shi)對象
{if condition="$user.name neq 'ThinkPHP'"}ThinkPHP
{else /} other Framework
{/if}
或(huo)者(zhe)知道(dao)user變(bian)量是對象
{if condition="$user:name neq 'ThinkPHP'"}ThinkPHP
{else /} other Framework
{/if}
由于if標簽的condition屬性里面基本上使用的是php語法,盡可能使用判斷標簽和Switch標簽會更加簡潔,原(yuan)則上來(lai)說,能夠用(yong)switch和(he)比較標簽(qian)解決的(de)盡(jin)量不用(yong)if標簽(qian)完成。因為switch和(he)比較標簽(qian)可以(yi)使用(yong)變量調節器和(he)系統變量。如果某些特殊(shu)的(de)要(yao)求下(xia)面,IF標簽(qian)仍然無(wu)法滿足要(yao)求的(de)話,可以(yi)使用(yong)原(yuan)生php代碼或者PHP標簽(qian)來(lai)直(zhi)接書寫代碼。
簡潔的用法
{if condition="表達式"}
{if (表達式)}
{if 表達式}
這三(san)種寫法(fa)結(jie)果是一樣的
范圍判斷
范圍(wei)判斷標(biao)簽(qian)包括in notin between notbetween四個標(biao)簽(qian),都(dou)用(yong)于判斷變量是否(fou)中某個范圍(wei)。
IN和NOTIN
用法: 假設我們中控(kong)制器中給id賦值為(wei)1:
$id = 1;
$this->assign('id',$id);
我們(men)可以使用in標簽來(lai)判斷模(mo)板(ban)變量(liang)是否在某個(ge)范圍(wei)內,例如:
{in name="id" value="1,2,3"}
id在范圍內
{/in}
最后會輸出:id在范圍內。
如果(guo)判斷不在某個范圍(wei)內,可(ke)以使用notin標簽:
{notin name="id" value="1,2,3"}
id不在范圍內
{/notin}
最后會輸出:id不在范圍內。
可以把上面兩(liang)個標(biao)簽合并成為:
{in name="id" value="1,2,3"}
id在范圍內
{else/}
id不在范圍內
{/in}
name屬性還可以支(zhi)持(chi)直接(jie)判斷(duan)系(xi)統變量,例(li)如(ru):
{in name="Think.get.id" value="1,2,3"}
$_GET['id'] 在范圍內
{/in}
更(geng)多(duo)的系統變量(liang)用法可以參(can)考部(bu)分。
value屬性也可以(yi)使用變量,例如:
{in name="id" value="$range"}
id在范圍內
{/in}
$range變量可以是數組(zu),也可以是以逗(dou)號分隔的(de)字(zi)符串。
value屬性還可以(yi)使用系統變量,例如:
{in name="id" value="$Think.post.ids"}
id在范圍內
{/in}
BETWEEN 和 NOTBETWEEN
可以(yi)使用between標簽來判(pan)斷變量是(shi)否(fou)在(zai)某個區(qu)間范圍內,可以(yi)使用:
{between name="id" value="1,10"}
輸出內容1
{/between}
同樣,也可(ke)以(yi)使用notbetween標簽來判斷變量不在(zai)某個范圍內:
{notbetween name="id" value="1,10"}
輸出內容2
{/notbetween}
也可以使用(yong)else標(biao)簽把兩個用(yong)法合并,例如(ru):
{between name="id" value="1,10"}
輸出內容1
{else/}
輸出內容2
{/between}
當使用between標(biao)簽的時候,value只需要(yao)一個區間范圍,也就是只支持(chi)兩個值,后面(mian)的值無效,例(li)如(ru)
{between name="id" value="1,3,10"}
輸出內容1
{/between}
實際判斷的范圍區間是1~3,而不是1~10,也可以(yi)支持字符串判(pan)斷,例如:
{between name="id" value="A,Z"}
輸出內容1
{/between}
name屬性(xing)可(ke)以直(zhi)接使用系(xi)統變量(liang),例如:
{between name="Think.post.id" value="1,5"}
輸出內容1
{/between}
value屬(shu)性也可以使用變量,例如:
{between name="id" value="$range"}
輸出內容1
{/between}
變量(liang)的(de)值可以(yi)是字符串或者數組,還可以(yi)支(zhi)持(chi)系統變量(liang)。
{between name="id" value="$Think.get.range"}
輸出內容1
{/between}
RANGE
也可以直接使用(yong)range標簽,替換前面的判(pan)斷用(yong)法:
{range name="id" value="1,2,3" type="in"}
輸出內容1
{/range}
其中type屬性的值可(ke)以用in/notin/between/notbetween,其它屬性的用法和IN或者BETWEEN一致(zhi)。
PRESENT NOTPRESENT標簽
present標簽用于判斷某個變量(liang)是否已經定義,用法(fa):
{present name="name"}
name已經賦值
{/present}
如果判斷沒有(you)賦值(zhi),可以使用:
{notpresent name="name"}
name還沒有賦值
{/notpresent}
可以(yi)把上面兩個標簽(qian)合(he)并成為:
{present name="name"}
name已經賦值
{else /}
name還沒有賦值
{/present}
present標簽(qian)的(de)name屬(shu)性可以直(zhi)接使(shi)用系統變量,例(li)如:
{present name="Think.get.name"}
$_GET['name']已經賦值
{/present}
EMPTY NOTEMPTY 標簽
empty標簽用(yong)于(yu)判斷某個變量是否為(wei)空,用(yong)法(fa):
{empty name="name"}
name為空值
{/empty}
如(ru)果判斷沒(mei)有賦值,可以使用:
{notempty name="name"}
name不為空
{/notempty}
可(ke)以把上面兩個標簽合并(bing)成為:
{empty name="name"}
name為空
{else /}
name不為空
{/empty}
name屬(shu)性可以直接(jie)使用系統變量(liang),例如(ru):
{empty name="Think.get.name"}
$_GET['name']為空值
{/empty}
DEFINED 標簽
DEFINED標簽用于判(pan)斷某個常(chang)量是否有定義,用法如下(xia):
{defined name="NAME"}
NAME常量已經定義
{/defined}
name屬性的(de)值要注(zhu)意嚴(yan)格大小寫
如果判斷(duan)沒有被定(ding)義,可(ke)以使用:
{notdefined name="NAME"}
NAME常(chang)量未(wei)定義
{/notdefined}
可以把上(shang)面兩個(ge)標簽合并成為:
{defined name="NAME"}
NAME常量已經定義
{else /}
NAME常量未定義
{/defined}
