文章出處

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>

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()