ThinkPHP6 模板引擎普通标签中,模板引擎运算符函数,循环标签,判断标签的使用,及一些特殊标签
ThinkPHP6 模板引擎普通標簽中,模板引擎運算符函數,循環標簽,判斷標簽的使用,及一些特殊標簽
模板引擎支持普通標簽和XML標簽方式兩種標簽定義,分別用于不同的目的:
| 普通標簽 | 主要用于輸出變量、函數過濾和做一些基本的運算操作 |
| XML標簽 | 也稱為標簽庫標簽,主要完成一些邏輯判斷、控制和循環輸出,并且可擴展 |
這種方式的結合保證了模板引擎的簡潔和強大的有效融合。
模板文件可以同時包含普通標簽和標簽庫標簽,標簽的定界符都可以重新配置。
普通標簽
普通標簽用于變量輸出和模板注釋,普通模板標簽默認以{ 和 } 作為開始和結束標識,并且在開始標記緊跟標簽的定義,如果之間有空格或者換行則被視為非模板標簽直接輸出。 例如:{$name} 、{$vo.name} 、{$vo['name']|strtoupper} 都屬于正確的標簽,而{ $name} 、{ $vo.name}則不屬于。
普通標簽中支持函數,注釋,加減乘除的運算符及三目運算符…
運算符,函數
1. 運算符
可以對模板輸出使用運算符,包括如下支持。
| + | {$a+$b} |
| - | {$a-$b} |
| * | {$a*$b} |
| / | {$a/$b} |
| % | {$a%$b} |
| ++ | {$a++} 或 {++$a} |
| -- | {$a--} 或{--$a} |
| 綜合運算 | {$a+$b*10+$c} |
示例:模板引擎運算符的使用
后端部分
<?php namespace app\controller;use app\BaseController; use think\facade\View; // 使用模板引擎 class Index extends BaseController {public function index(){view::assign('a',30);view::assign('b',5);return view::fetch();} }視圖部分:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><p> a+b={$a+$b}</p><p> a-b={$a-$b}</p><p> a*b={$a*$b}</p><p> a/b={$a/$b}</p><p> a++={$a++}</p><p> a--={$a--}</p> </body> </html>2. 函數
系統內置了下面幾個固定的過濾規則(不區分大小寫)
| date | 日期格式化(支持各種時間類型) |
| format | 字符串格式化 |
| upper | 轉換為大寫 |
| lower | 轉換為小寫 |
| first | 輸出數組的第一個元素 |
| last | 輸出數組的最后一個元素 |
| default | 默認值 |
| raw | 不使用(默認)轉義 |
示例:模板引擎函數的使用
后端
<?php namespace app\controller;use app\BaseController; use think\facade\View; // 使用模板引擎 class Index extends BaseController {public function index(){view::assign('now',time());view::assign('strs','abcd0123jk');view::assign('pwd','2020SOLO');return view::fetch();}}視圖
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><p> {$now|date="y-m-d h:m:s"}</p><p>{$strs|substr=0,3}</p><p>{$strs|upper}</p><p>{$strs|lower}</p><p>{$pwd|md5}</p> </body> </html>模板引擎函數使用其實就是 {data|過濾規則(函數名)}
注釋
1. 單行注釋
格式:
{/\* 注釋內容 \*/ } 或 {// 注釋內容 }例如:
{// 這是模板注釋內容 }注意{和注釋標記之間不能有空格。
2. 多行注釋
支持多行注釋,例如:
{/* 這是模板 注釋內容*/ }模板注釋支持多行,模板注釋在生成編譯緩存文件后會自動刪除(即前端看不到),這一點和Html的注釋不同。
循環標簽
1. foreach
foreach標簽語法規范,和php的foreach一模一樣,只是開始結束標記不同,也可以單獨遍歷key或者value。foreach標記用于遍歷輸出數組的元素或者對象的屬性。
{foreach $數組名 as $k=>$v}<div><p>{$v['鍵名']}</p></div> {foreach/}首先,我們從控制器返回給視圖層一些數據,比如說一個用戶數組
<?php namespace app\controller;use app\BaseController; use think\facade\View; // 使用模板引擎class Index extends BaseController {public function index(){$arr =[['name'=>'張三','age'=>30,'gender'=>'男'],['name'=>'王五','age'=>33,'gender'=>'男'],['name'=>'李四','age'=>26,'gender'=>'男']];view::assign('arr',$arr);return view::fetch();}}第二步,在視圖頁面利用foreach標簽將數據循環渲染
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h1>我是index頁</h1>{foreach $arr as $v}<div><p>姓名:{$v['name']}</p><p>年齡:{$v['age']}</p><p>性別:{$v['gender']}</p></div>{/foreach} </body> </html>foreach 標簽使用和php中的foreach幾乎完全一樣,只是寫法略有區別,我們將上面的前端代碼進行修改如下,將對應的索引下標也渲染出來。
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h1>我是index頁</h1>{foreach $arr as $k=>$v}<div><h3>{$k}</h3><p>姓名:{$v['name']}</p><p>年齡:{$v['age']}</p><p>性別:{$v['gender']}</p></div>{/foreach} </body> </html>2. volist
volist標簽通常用于查詢數據集或者二維數組的結果輸出。
volist語法規范:
{volist name="arr" id="v" key="k" offset="1" length="2"}<div><p>{$k}----${v['鍵名']}</p></div> {/volist}volist標記中的屬性值解釋如下:
- name 模板賦值的變量名稱 (即你后端傳遞過來的變量名)
- id 當前的循環變量,隨意起名
- key 下標,從1開始,如果不顯式的聲明的話,默認通過變量i來獲取
- offset 開始行數
- length 獲取行數,輸出的循環元素的個數的長度
- empty 如果數據為空,顯示此文字
為了簡單,就使用上面的foreach標記的后端傳遞的參數,將前端代碼修改即可。
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h1>我是index頁</h1>{foreach $arr as $k=>$v}<div><h3>{$k}</h3><p>姓名:{$v['name']}</p><p>年齡:{$v['age']}</p><p>性別:{$v['gender']}</p></div>{/foreach}<!-- 新增部分 volist --><hr>{volist name="arr" id="item" key="key"}<div><h3>{$key}</h3><p>姓名:{$item['name']}</p><p>年齡:{$item['age']}</p><p>性別:{$item['gender']}</p></div>{/volist} </body> </html>volist 標記和foreach 標記也差不多,只是需要通過name來指明要循環的變量,id來確定每次循環的變量名,然后提供了更靈活的offset和length屬性,可以根據不同的需求,進行不同的循環渲染,最后就是foreach標記中索引下標從0開始,volist標記索引下標從1開始。
3. for
for標記用法:
{for start="開始值" end="結束值" comparison="" step="步進值" name="循環變量名" } <p>{$循環變量名}</p> {/for}開始值、結束值、步進值和循環變量都可以支持變量,開始值和結束值是必須,其他是可選。comparison 的默認值是lt,name的默認值是i,步進值的默認值是1。
這里就簡單的輸出一個1-10的循環把,每次步長為2
<!-- for標記 --> {for start="0" end="10" step="2"}<p>{$i}</p> {/for}判斷標簽
比較標簽用于簡單的變量比較,復雜的判斷條件可以用if標簽替換,比較標簽是一組標簽的集合,基本上用法都一致,如下:
{比較標簽 name="變量" value="值"} 內容 {/比較標簽}系統支持的比較標簽以及所表示的含義分別是:
| eq或者 equal | 等于 |
| neq 或者notequal | 不等于 |
| gt | 大于 |
| egt | 大于等于 |
| lt | 小于 |
| elt | 小于等于 |
| heq | 恒等于 |
| nheq | 不恒等于 |
他們的用法基本是一致的,區別在于判斷的條件不同,并且所有的比較標簽都可以和else標簽一起使用。
例如,要求name變量的值等于value就輸出,可以使用:
{eq name="name" value="value"}value{/eq}或者
{equal name="name" value="value"}value{/equal}也可以支持和else標簽混合使用:
{eq name="name" value="value"} 相等 {else/} 不相等 {/eq}…其余上述標簽用法都差不多,實際的用例可以參考tp5完全開發手冊的標簽。
1. if 標簽
if標記用法規范:
{if 表達式}value1 {elseif 表達式 /}value2 {else /}value3 {/if}示例:
同樣的我們先從后端傳遞一些數據過去
<?php namespace app\controller;use app\BaseController; use think\facade\View; // 使用模板引擎class Index extends BaseController {public function index(){$status = 0;$light = 1;view::assign('status',$status);view::assign('light',$light);return view::fetch();} }視圖部分
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body>{if ($status==1)}管理員{else/} 普通用戶{/if}<hr>{if ($light>0)}綠燈{elseif ($light==0)}黃燈{else($light<0)}紅燈{/if} </body> </html>2. switch 標簽
switch標記用法規范:
{switch 變量 }{case value1 }輸出內容1{/case}{case value2}輸出內容2{/case}{default /}默認情況 {/switch}示例:依舊使用上面if標記的后端數據,只是將紅綠的if塊改為switch塊
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body>{if ($status==1)}管理員{else/} 普通用戶{/if}<hr>{switch $light}{case $light>0}綠燈{/case}{case 0}黃燈{/case}{case $light<0}紅燈{/case}{/switch} </body> </html>特殊標簽
1. literal 防止解析(原樣輸出)標簽
有些時候,我們不希望模板引擎將模板變量解析,那么就可以使用literal標記
{literal}Hello,{$name}!{/literal}上面的{$name}標簽被literal標簽包含,因此并不會被模板引擎解析,而是保持原樣輸出。
literal標簽還可以用于頁面的JS代碼外層,確保JS代碼中的某些用法和模板引擎不產生混淆。
總之,所有可能和內置模板引擎的解析規則沖突的地方都可以使用literal標簽處理。
2. php 標簽
Php代碼可以和標簽在模板文件中混合使用,可以在模板文件里面書寫任意的PHP語句代碼 :
例如:
{php}echo 'Hello,world!';{/php}建議需要使用PHP代碼的時候盡量采用php標簽,因為原生的PHP語法可能會被配置禁用而導致解析錯誤。
小結
模板引擎提供了運算符,函數,可以在前端更靈活的去編寫不同的代碼。
函數的使用規則模板引擎函數使用其實就是 {data|過濾規則(函數名)}。
模板引擎注釋,單行注釋和多行注釋與php一致,只是在{} 大括號中間,且并不會被前端代碼解析。
模板引擎循環標簽,提供了三種方式,foreach,volist,for,其中volist最為靈活。
模板引擎判斷標簽,只能說應有盡有,{if}{elseif}{else/}{/if},{switch}{case}{/case}{/switch}…
一些特殊標記,literal原樣輸出標記,php標記與<?php ?>功能一樣,更推薦使用php標記。
總結
以上是生活随笔為你收集整理的ThinkPHP6 模板引擎普通标签中,模板引擎运算符函数,循环标签,判断标签的使用,及一些特殊标签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小白自学python——初识python
- 下一篇: PHP标签的模板技术