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}