## switch標簽
用法:
```
<switch name="變量">
<case value="值1" break="0或1,默認 break">輸出內容1</case>
<case value="值2">輸出內容2</case>
<default />默認情況
</switch>
```
使用方法如下:
```
<switch name="user_id">
<case value="1">value1</case>
<case value="2">value2</case>
<default />default
</switch>
```
其中name屬性可以使用函數以及系統變量,例如:
```
<switch name="Think.get.userId|abs">
<case value="1">admin</case>
<default />default
</switch>
```
對于case的value屬性可以支持多個條件的判斷,使用”|”進行分割,例如:
```
<switch name="Think.get.type">
<case value="gif|png|jpg">圖像格式</case>
<default />其他格式
</switch>
```
表示如果$_GET["type"] 是gif、png或者jpg的話,就判斷為圖像格式。
Case標簽還有一個break屬性,表示是否需要break,默認是會自動添加break,如果不要break,可以使用:
```
<switch name="Think.get.user_id">
<case value="1" break="0">admin</case>
<case value="2">admin2</case>
<default />default
</switch>
```
也可以對case的value屬性使用變量,例如:
```
<switch name="user_id">
<case value="$adminId">admin</case>
<case value="$memberId">member</case>
<default />default
</switch>
```
使用變量方式的情況下,不再支持多個條件的同時判斷。
簡潔的用法
```
<switch $User.userId>
<case $adminId>admin</case>
<case $memberId>admin2</case>
</switch>
```
## IF標簽
用法示例:
```
<if condition="($name == 1) OR ($name gt 100) "> value1
<elseif condition="$name eq 2"/>value2
<else /> value3
</if>
```
除此之外,我們可以在condition屬性里面使用php代碼,例如:
```
<if condition="strtoupper($user['name']) neq 'THINKPHP'">ThinkPHP
<else /> other Framework
</if>
```
condition屬性可以支持點語法和對象語法,例如: 自動判斷user變量是數組還是對象
```
<if condition="$user.name neq 'ThinkPHP'">ThinkPHP
<else /> other Framework
</if>
```
或者知道user變量是對象
```
<if condition="$user:name neq 'ThinkPHP'">ThinkPHP
<else /> other Framework
</if>
```
由于if標簽的condition屬性里面基本上使用的是php語法,盡可能使用判斷標簽和Switch標簽會更加簡潔,原則上來說,能夠用switch和比較標簽解決的盡量不用if標簽完成。因為switch和比較標簽可以使用變量調節器和系統變量。如果某些特殊的要求下面,IF標簽仍然無法滿足要求的話,可以使用原生php代碼或者PHP標簽來直接書寫代碼。
簡潔的用法
```
<if condition="表達式">
<if (表達式)>
<if 表達式>
```
這三種寫法結果是一樣的
## 范圍判斷
范圍判斷標簽包括in notin between notbetween四個標簽,都用于判斷變量是否中某個范圍。
## IN和NOTIN
用法: 假設我們中控制器中給id賦值為1:
```
$id = 1;
$this->assign('id',$id);
```
我們可以使用in標簽來判斷模板變量是否在某個范圍內,例如:
```
<in name="id" value="1,2,3">
id在范圍內
</in>
```
最后會輸出:id在范圍內。
如果判斷不在某個范圍內,可以使用notin標簽:
```
<notin name="id" value="1,2,3">
id不在范圍內
</notin>
```
最后會輸出:id不在范圍內。
可以把上面兩個標簽合并成為:
```
<in name="id" value="1,2,3">
id在范圍內
<else/>
id不在范圍內
</in>
```
name屬性還可以支持直接判斷系統變量,例如:
```
<in name="Think.get.id" value="1,2,3">
$_GET['id'] 在范圍內
</in>
```
更多的系統變量用法可以參考系統變量部分。
value屬性也可以使用變量,例如:
```
<in name="id" value="$range">
id在范圍內
</in>
```
$range變量可以是數組,也可以是以逗號分隔的字符串。
value屬性還可以使用系統變量,例如:
```
<in name="id" value="$Think.post.ids">
id在范圍內
</in>
```
## BETWEEN 和 NOTBETWEEN
可以使用between標簽來判斷變量是否在某個區間范圍內,可以使用:
```
<between name="id" value="1,10">
輸出內容1
</between>
```
同樣,也可以使用notbetween標簽來判斷變量不在某個范圍內:
```
<notbetween name="id" value="1,10">
輸出內容2
</notbetween>
```
也可以使用else標簽把兩個用法合并,例如:
```
<between name="id" value="1,10">
輸出內容1
<else/>
輸出內容2
</between>
```
當使用between標簽的時候,value只需要一個區間范圍,也就是只支持兩個值,后面的值無效,例如
```
<between name="id" value="1,3,10">
輸出內容1
</between>
```
實際判斷的范圍區間是1~3,而不是1~10,也可以支持字符串判斷,例如:
```
<between name="id" value="A,Z">
輸出內容1
</between>
```
name屬性可以直接使用系統變量,例如:
```
<between name="Think.post.id" value="1,5">
輸出內容1
</between>
```
value屬性也可以使用變量,例如:
```
<between name="id" value="$range">
輸出內容1
</between>
```
變量的值可以是字符串或者數組,還可以支持系統變量。
```
<between name="id" value="$Think.get.range">
輸出內容1
</between>
```
## PRESENT NOTPRESENT標簽
present標簽用于判斷某個變量是否已經定義,用法:
```
<present name="name">
name已經賦值
</present>
```
如果判斷沒有賦值,可以使用:
```
<notpresent name="name">
name還沒有賦值
</notpresent>
```
可以把上面兩個標簽合并成為:
```
<present name="name">
name已經賦值
<else />
name還沒有賦值
</present>
```
present標簽的name屬性可以直接使用系統變量,例如:
```
<present name="Think.get.name">
$_GET['name']已經賦值
</present>
```
## EMPTY NOTEMPTY 標簽
empty標簽用于判斷某個變量是否為空,用法:
```
<empty name="name">
name為空值
</empty>
```
如果判斷沒有賦值,可以使用:
```
<notempty name="name">
name不為空
</notempty>
```
可以把上面兩個標簽合并成為:
```
<empty name="name">
name為空
<else />
name不為空
</empty>
```
name屬性可以直接使用系統變量,例如:
```
<empty name="Think.get.name">
$_GET['name']為空值
</empty>
```
## DEFINED 標簽
DEFINED標簽用于判斷某個常量是否有定義,用法如下:
```
<defined name="NAME">
NAME常量已經定義
</defined>
```
name屬性的值要注意嚴格大小寫
如果判斷沒有被定義,可以使用:
```
<notdefined name="NAME">
NAME常量未定義
</notdefined>
```
可以把上面兩個標簽合并成為:
```
<defined name="NAME">
NAME常量已經定義
<else />
NAME常量未定義
</defined>
```
> 參考 [TP5手冊](http://www.hmoore.net/manual/thinkphp5/125019)
- 序言
- 基礎
- 主要特性
- 安裝ThinkCMF
- 為了更爽
- 目錄結構
- 入口文件
- 第三方庫
- 開發規范
- 數據庫規范
- 調試模式
- URL訪問
- 應用
- 配置
- 路由
- 控制器
- 控制器定義
- 控制器模板賦值
- 控制器模板渲染
- 前臺控制器
- 前臺用戶控制器
- 后臺控制器
- 跳轉,AJAX返回和重定向
- URL生成
- 請求
- 請求信息
- 輸入變量
- 請求類型
- 獲取請求頭信息
- 偽靜態
- 更多
- 系統函數
- cmf_auth_check 用戶權限檢查
- cmf_check_user_action 用戶訪問控制
- cmf_check_verification_code 數字驗證碼檢查
- cmf_clear_verification_code 清除數字驗證碼
- cmf_compare_password 用戶密碼比較
- cmf_current_lang 判斷當前語言包
- cmf_get_admin_style 獲取后臺風格
- cmf_get_content_images 獲取HTML圖片
- cmf_get_current_admin_id 登錄管理員ID
- cmf_get_current_user 獲取登錄用戶信息
- cmf_get_current_user_id 登錄用戶ID
- cmf_get_file_download_url 獲取文件下載鏈接
- cmf_get_file_extension 獲取文件擴展名
- cmf_get_image_url 獲取圖片 URL
- cmf_get_option 獲取系統配置
- cmf_get_plugin_class 獲取插件類名
- cmf_get_root 網站根目錄
- cmf_get_site_info 獲取網站信息
- cmf_get_user_avatar_url 獲取用戶頭像URL
- cmf_get_verification_code 生成數字驗證碼
- cmf_is_mobile 判斷是否為手機
- cmf_is_user_login 判斷用戶是否登錄
- cmf_is_wechat 判斷是否為微信
- cmf_password 密碼加密
- cmf_plugin_url 插件URL生成
- cmf_replace_content_file_url 替換編輯器文件地址
- cmf_send_email 發送郵件
- cmf_set_dynamic_config 設置動態配置
- cmf_set_option 設置系統配置
- cmf_split_sql 切分SQL文件
- cmf_update_current_user 更新當前用戶信息
- cmf_url_encode 生成base64的url
- cmf_verification_code_log 驗證碼發送日志
- get_client_ip 獲取客戶端IP地址
- hook 添加鉤子
- cmf_check_mobile 檢查手機號
- cmf_is_android 判斷是否為安卓手機
- cmf_is_ios 判斷是否為ios訪問
- cmf_is_iphone 判斷是否為iphone訪問
- cmf_is_ipad 判斷是否為ipad訪問
- 數據庫
- 數據庫配置
- 添加數據
- 更新數據
- 查詢數據
- 刪除數據
- 事務操作
- 更多數據庫操作
- 模型
- 模型定義
- 添加數據
- 更新數據
- 查詢數據
- 刪除數據
- 數據驗證
- 應用
- 應用的概念
- 應用開發流程
- 導航共享
- 幾個重要基類
- 后臺菜單注解
- 用戶操作配置
- URL 規則配置
- 模板
- 模板常量
- 模板標簽
- 變量輸出
- 系統變量
- 請求參數
- 使用函數
- 使用默認值
- 使用運算符
- 三元運算
- 原樣輸出
- 模板注釋
- 模板目錄
- 包含文件
- 模板布局
- 模板繼承
- 網站信息
- 內置標簽
- 循環輸出標簽
- 比較標簽
- 條件判斷
- 標簽嵌套
- 原生PHP
- 定義標簽
- CMF標簽
- 導航標簽
- 子導航標簽
- 驗證碼標簽
- 幻燈片標簽
- 鉤子標簽
- 友情鏈接標簽
- 分頁標簽
- 傻瓜式模板
- 什么是傻瓜式模板
- 模板描述文件
- 模板文件配置
- 模板變量類型
- 模板變量數據源
- 導航模板數據源
- 導航菜單模板數據源
- 幻燈片模板數據源
- 模板切換
- 插件
- 插件鉤子
- 前臺模板鉤子
- 核心鉤子
- send_mobile_verification_code
- comment
- guestbook
- admin_dashboard
- switch_theme
- admin_login
- admin_init
- home_init
- 插件類主文件
- 插件開發流程
- 插件配置
- 插件控制器
- 插件后臺管理控制器
- 插件后臺菜單
- 插件視圖
- 插件數據庫模型
- 插件多語言
- 插件API控制器
- 前端
- Wind.js
- 前端組件
- js-ajax-form
- js-ajax-delete
- js-ajax-dialog-btn
- js-count-btn
- js-date
- js-datetime
- js-bootstrap-date
- js-bootstrap-datetime
- 專題
- 緩存
- Session
- Cookie
- 分頁
- 驗證碼
- 文件上傳
- 第三方擴展
- 門戶應用
- 模板目錄結構
- 模板開發
- 模板標簽
- 加載標簽庫
- 文章列表標簽
- 面包屑標簽
- 文章分類標簽
- 所有子分類標簽
- 子分類標簽
- 標簽文章列表標簽
- 門戶模板數據源
- 文章分類模板數據源
- 頁面模板數據源
- 附錄
- 升級日志
- 升級指導