ThinkPHP 模版中的內置標簽,所謂內置標簽就是模版引擎 提供的一組可以完成控制、循環和判斷功能的類似 HTML 語法的標簽。
一. 判斷比較
ThinkPHP 內置了 IF 標簽用于在模版中進行條件判斷。
首先在 Home/controller/UserController.class.php 內插入以下代碼:
1 class UserController extends Controller { 2 public function index() { 3 $user='蠟筆小新'; 4 $this->assign('user',$user); 5 $this->display(); 6 } 7 8 }
然后在 View/User/index.html 中寫入以下代碼:
1 <html> 2 <head></head> 3 <body> 4 5 <if condition="$user eq '蠟筆小新'"> 6 小新 7 <elseif condition ="$user eq '黑崎一護'" /> 8 一護 9 <else /> 10 錯誤 11 </if> 12 13 </body> 14
編譯后在 Runtime/Cache/Home 里看到的編譯后的代碼為:
1 <?php if (!defined('THINK_PATH')) exit();?> 2 <html> 3 <head></head> 4 <body> 5 6 <?php if($user == '蠟筆小新'): ?>小新 7 <?php elseif($user == '黑崎一護'): ?> 8 一護 9 <?php else: ?> 10 錯誤<?php endif; ?> 11 12 </body> 13 </html>
也就是輸出時,ThinkPHP自動編譯為PHP原生的代碼:
PS:condition 屬性中支持 eq 等判斷表達式,由于會導致模版解析混淆,所以不支持“>”、“<”等表達式,但是支持"="。
1 //condition 條件里可以使用 PHP 函數 2 <if condition="mb_substr($user,0,3,'UTF-8') eq '蠟筆小'">
1 //condition 條件里使用點語法,智能判斷數組或對象 2 <if condition="$data.user eq '蠟筆小新'">
1 //condition 條件里使用冒號語法,直接使用對象 2 <if condition="$data:user eq '蠟筆小新'">
這是當如果是表單提交過來的user是“蠟筆小新”,則符合條件,
也可是 http://localhost/demo39/Home/User/index.html?user=蠟筆小新 ,這樣也能得到user的變量
1 //condition 條件里使用系統變量 2 <if condition="$Think.get.user eq '蠟筆小新'">
PS:由于 if 標簽的 condition 屬性里面基本上使用的是 php 語法,盡可能使用判斷標簽
和 Switch 標簽會更加簡潔,原則上來說,能夠用 switch 和比較標簽解決的盡量不用 if 標簽
完成。因為 switch 和比較標簽可以使用變量調節器和系統變量。如果某些特殊的要求下面,
IF 標簽仍然無法滿足要求的話,可以使用原生 php 代碼或者 PHP 標簽來直接書寫代碼。
在 View/User/index.html 中寫入以下代碼:
1 <html> 2 <head></head> 3 <body> 4 5 <switch name="user"> 6 <case value="蠟筆小新">小新</case> 7 <case value="黑崎一護">一護</case> 8 <default/>錯誤 9 </switch> 10 11 </body> 12 </html>
需要注意的是: <switch name="user"> 中的user前面是沒有“$”符號的。
這時 Runtime/Cache/Home 中的編譯為:
1 <?php switch($user): case "蠟筆小新": ?>小新<?php break;?> 2 <?php case "黑崎一護": ?>一護<?php break;?> 3 <?php default: ?>錯誤<?php endswitch;?>
也就是在編譯時會自動加上 break; 語句
默認情況下,case 會自動添加 break 語句防止穿透,如果你就是想要穿透,那么可以去
除 break。當然,絕大部分不需要設置 break。
1 //去除 break 2 <case value="蠟筆小新" break="0">小新</case>
這時 <case value="黑崎一護">一護</case> 中沒有加上 break="0" ,但是瀏覽器中還是會輸出:
ThinkPHP 提供了一組比較標簽用于簡單的變量比較,復雜的判斷條件可以用 IF 標簽替換。
比較標簽
比較標簽 | 含義 |
eq 或 equal | 等于 |
neq 或 notequal | 不等于 |
gt | 大于 |
egt | 大于等于 |
lt | 小于 |
elt | 小于等于 |
heq | 恒等于 |
nheq | 不恒等于 |
1 //控制器變量$user=蠟筆小新,輸出小新 2 <eq name="user" value="蠟筆小新">小新</eq>
PS:name 的值和 IF 語句一樣,可以是變量、數組、對象、函數或系統變量,其他比較標簽使用方法類似,這里不在贅述。
比較標簽還提供了一個統一標簽 compare,比較類型通過 type 屬性完成。
1 //compare 統一方法 2 <compare type="eq" name="user" value="蠟筆小新">小新</compare>
ThinkPHP 提供了一組范圍判斷標簽:in、notin、between、notbetween 四個標簽,都用
于判斷變量是否在某個范圍中。
在 Home/controller/UserController.class.php 中插入以下代碼:
1 class UserController extends Controller { 2 public function index() { 3 $id='3'; 4 $this->assign('id',$id); 5 $this->display(); 6 } 7 }
然后在 View/User/index.html 中的代碼為:
1 <in name="id" value="1,2,3"> 2 id在范圍內 3 <else /> 4 id不在范圍內 5 </in>
notin 標簽,正好相反
Home/controller/UserController.class.php 中的代碼是一樣的,然后在 View/User/index.html 中的代碼則是相反的:
1 <notin name="id" value="1,2,3"> 2 id不在范圍內 3 <else /> 4 id在范圍內 5 </notin>
between標簽,從哪里到哪里的范圍
Home/controller/UserController.class.php 中的代碼是一樣的,然后在 View/User/index.html 中的代碼如下:
1 <between name="id" value="1,10"> 2 id在范圍內 3 <else /> 4 id不在范圍內 5 </between>
notbetween標簽,從哪里到哪里的范圍
Home/controller/UserController.class.php 中的代碼是一樣的,然后在 View/User/index.html 中的代碼如下:
1 <notbetween name="id" value="1,10"> 2 id在范圍內 3 <else /> 4 id不在范圍內 5 </notbetween>
range標簽,可以統一in、notin、between和notbetween
Home/controller/UserController.class.php 中的代碼是一樣的,然后在 View/User/index.html 中的代碼如下:
1 <range name="id" value="1,2,3" type="in" > 2 id在范圍內 3 <else /> 4 id不在范圍內 5 </range>
name值可以是系統變量
這時是不需要 Home/controller/UserController.class.php 中的代碼的,然后在 View/User/index.html 中的代碼如下:
1 <in name="Think.get.id" value="1,2,3"> 2 id在范圍內 3 <else /> 4 id不在范圍內 5 </in>
注意,這時的 name 中的 Think 前是不要加上"$"符號的,然后在url后加上 ?id=1 ,
整個的url的形式為: http://localhost/demo39/Home/User/index.html?id=1
value值可以是變量或系統變量
Home/controller/UserController.class.php 中的代碼是一樣的,然后在 View/User/index.html 中的代碼如下:
1 <in name="id" value="$Think.get.range"> 2 id在范圍內 3 <else /> 4 id不在范圍內 5 </in>
記住這時的 value 中的 Think 前面是要加上"$"符號的,這時所在的范圍是 $Think.get.range ,
則我們可以在url的最后加上 ?range=1,2,3 ,整個url為: http://localhost/demo39/Home/User/index.html?range=2,3,4 ,即可測試成功
ThinkPHP 模版提供了一組用于判斷變量的標簽。
斷變量是否已賦值,賦值了就輸出,空字符串也算賦值
1 <present name="user"> 2 user已賦值 3 <else /> 4 user未賦值 5 </present>
1 //判斷變量是否已賦值,沒有創建或賦值為null,都算沒有值 2 <notpresent name="user">user 還沒有值</notpresent>
1 //判斷變量是否已賦值,系統變量 2 <present name="Think.get.user">$_GET['user']已賦值</present>
1 //判斷變量是否為空,空則輸出 2 <empty name="user">user 為空值</empty>
1 //判斷變量是否為空,不空則輸出 2 <notempty name="user">user不為空值</notempty>
1 //判斷變量是否為空,系統變量 2 <empty name="Think.get.user">$_GET['user']為空值</empty>
1 //判斷常量是否定義,定義了輸出 2 <defined name="APP_PATH">APP_PATH 常量已定義</defined>
1 //判斷常量是否定義,沒定義輸出 2 <notdefined name="APP_PATH">APP_PATH 常量未定義</notdefined>
1 //判斷常量是否定義,組合 2 <defined name="APP_PATH"> 3 APP_PATH常量已定義 4 <else /> 5 APP_PATH常量未定義 6 </defined>
文章列表