# ThinkPHP6.0 視圖
模板引擎支持普通標簽和XML標簽方式兩種標簽定義,分別用于不同的目的.
* * *
## ThinkPHP6 視圖
* 模板引擎支持`普通標簽`和`XML標簽`方式兩種標簽定義,分別用于不同的目的
標簽類型描述普通標簽主要用于輸出變量、函數過濾和做一些基本的運算操作XML標簽也稱為標簽庫標簽,主要完成一些邏輯判斷、控制和循環輸出,并且可擴展
## ?一、運算符?
運算符示例+{$a+$b}-{$a-$b}*{$a*$b}/{$a/$b}%{$a%$b}++{$a++} 或 {++$a}--{$a--} 或{--$a}綜合運算{$a+$b*10+$c}三元運算符{$a==$b ? 'yes' : 'no'}
controller文件
> public function index(){
>
> ? ? View::assign('a',100);
>
> ? ? View::assign('b',21);
>
> ? ? return View::fetch();
>
> }
view文件
> {$a+$b}
>
> {$a-$b}
>
> {$a\*$b}
>
> {$a/$b}
>
> {$a%$b}
>
> {$a++}
>
> {++$a}
>
> {$a--}
>
> {--$a}
>
> {$c ? '存在' : '不存在'}
## ?二、模版函數?
方法描述date日期格式化(支持各種時間類型)format字符串格式化upper轉換為大寫lower轉換為小寫first輸出數組的第一個元素last輸出數組的最后一個元素default默認值raw不使用(默認)轉義md5md5加密substr截取字符串
* 可以多函數調用
controller文件
> public function index(){
>
> ? ? View::assign('time',1576048640);
>
> ? ? View::assign('num',10.0032);
>
> ? ? View::assign('str','OUyangKE');
>
> ? ? View::assign('arr',\[
>
> ? ? ? ? '朱老師',
>
> ? ? ? ? '歐陽克',
>
> ? ? ? ? '西門大官人'
>
> ? ? \]);
>
> ? ? return View::fetch();
>
> }
view文件
> {$time|date='Y-m-d H:i:s'}
>
> {$num|format='%02d'}
>
> {$str|upper}
>
> {$str|lower}
>
> {$arr|first}
>
> {$arr|last}
>
> {$default|default="歐陽克"}
>
> {$str|substr=0,3}
>
> {$str|md5}
>
> {$str|lower|substr=0,3}
## 三、循環標簽
* `foreach`標簽的用法和PHP語法非常接近,用于循環輸出數組或者對象的屬性
controller文件
> public function index(){
>
> ? ? $arr = \[
>
> ? ? ? ? \[
>
> ? ? ? ? ? ? 'id' => 1,
>
> ? ? ? ? ? ? 'name' => '歐陽克'
>
> ? ? ? ? \],
>
> ? ? ? ? \[
>
> ? ? ? ? ? ? 'id' => 2,
>
> ? ? ? ? ? ? 'name' => '朱老師'
>
> ? ? ? ? \],
>
> ? ? ? ? \[
>
> ? ? ? ? ? ? 'id' => 3,
>
> ? ? ? ? ? ? 'name' => '西門大官人'
>
> ? ? ? ? \]
>
> ? ? \];
>
> ? ? View::assign('arr',$arr);
>
> ? ? return View::fetch();
>
> }
view文件
> {foreach $arr as $v}
>
> ? ?
>
> ? ? ? ? ID:{$v\['id'\]}
>
> ? ? ? ? 姓名:{$v\['name'\]}
>
> ? ?
>
> {/foreach}
## 四、volist 循環標簽
* 二維數組的結果輸出
* name 模板賦值的變量名稱
* id 當前的循環變量,可以隨意起名
* key 下標,從1開始,默認變量i
* offset 開始行數
* length 獲取行數
* empty 如果數據為空,顯示此文字
view文件
> {volist name="arr" id="v" key="k"? offset="1" length="2"}
>
> ? ?
>
> ? ? ? ? ID:{$v\['id'\]}
>
> ? ? ? ? 姓名:{$v\['name'\]}
>
> ? ? ? ? 下標:{$k}
>
> ? ?
>
> {/volist}
## 五、if 判斷標簽
* `if`標簽的用法和PHP語法非常接近,用于條件判斷
controller文件
> public function index(){
>
> ? ? View::assign('status',1);
>
> ? ? View::assign('order\_status',4);
>
> ? ? return View::fetch();
>
> }
view文件
> {if $status == 1}
>
> ? ? 開啟
>
> {/if}
>
>
>
> {if $status == 0}
>
> ? ? 關閉
>
> {else/}
>
> ? ? 開啟
>
> {/if}
>
>
>
> {if $order\_status == 0}
>
> ? ? 未支付
>
> {elseif $order\_status == 1/}
>
> ? ? 已支付 待發貨
>
> {elseif $order\_status == 2/}
>
> ? ? 已發貨 待收貨
>
> {elseif $order\_status == 3/}
>
> ? ? 已收貨 待評論
>
> {elseif $order\_status == 4/}
>
> ? ? 已完成
>
> {/if}
## 六、switch 判斷標簽
* `switch`標簽的用法和PHP語法非常接近,用于條件判斷
view文件
> {switch $order\_status}
>
> ? ? {case 0 }未支付{/case}
>
> ? ? {case 1 }已支付 待發貨{/case}
>
> ? ? {case 2 }已發貨 待收貨{/case}
>
> ? ? {case 3 }已收貨 待評論{/case}
>
> ? ? {case 4 }已完成{/case}
>
> {/switch}
## 七、包含文件
* `include`標簽,引入模版文件
* `load`標簽,引入資源文件(css、js)
view文件,把頭部和尾部分文件
> {include file="public/header" /}
>
> {include file="public/left" /}
>
>
>
> {load href="/static/layui/css/layui.css" /}
>
> {load href="/static/layui/layui.js" /}
>
>
>
> {include file="public/tail" /}
## 八、其他標簽
1、條件標簽
標簽描述in判斷變量是否存在某些值notin判斷變量是否不存在某些值between 判斷變量是否存在某些值notbetween 判斷變量是否不存在某些范圍值present 判斷某個變量是否 已定義notpresent 判斷某個變量是否 未定義empty 判斷某個變量是否為空notempty 判斷某個變量是否不為空defined 判斷某個常量是否 已定義notdefined 判斷某個常量是否 未定義
~~~
public?function?index(){
????View::assign('number',100);
????View::assign('string','');
????return?View::fetch();
}
~~~
~~~
{in?name="number"?value="99,100,101"}
????number等于99,100,101任意一個值
{/in}
{notin?name="number"?value="99,100,101"}
????number不等于99,100,101任意一個值
{/notin}
{between?name="number"?value="1,10"}
????number等于1?到?10?之間的任意一個值
{/between}
{notbetween?name="number"?value="1,10"}
????number不等于1?到?10?之間的任意一個值
{/notbetween}
{present?name="number"}
????number已經定義
{/present}
{notpresent?name="n"}
????n還沒有定義
{/notpresent}
{empty?name="string"}
????name為空值
{/empty}
{notempty?name="string"}
????name有值
{/notempty}
{defined?name="NAME"}
????NAME常量已經定義
{/defined}
{notdefined?name="NAME"}
????NAME常量未定義
{/notdefined}
~~~
2、比較標簽
標簽描述eq等于neq 不等于gt 大于egt 大于等于lt小于elt 小于等于heq 恒等于nheq 不恒等于
~~~
public?function?index(){
????View::assign("number",100);
????View::assign("string","歐陽克");
????return?View::fetch();
}
~~~
~~~
{eq?name="number"?value="100"}
????number?等于?100
{/eq}
{neq?name="number"?value="101"}
????number?不等于?101
{/neq}
{gt?name="number"?value="33"}
????number?大于?33
{/gt}
{egt?name="number"?value="100"}
????number?大于等于?100
{/egt}
{lt?name="number"?value="200"}
????number?小于?200
{/lt}
{elt?name="number"?value="100"}
????number?小于等于?100
{/elt}
{heq?name="string"?value="歐陽克"}
????string?恒等于?歐陽克
{/heq}
{heq?name="string"?value="朱老師"}
????string?恒不等于?朱老師
{/heq}
~~~
3、循環標簽
標簽描述for計數循環
* start:開始值
* end:結束值
* step:步進值,默認1
* name:循環變量名,默認i
~~~
{for?start="1"?end="50"?step="5"?name="i"}
????{$i}<br/>
{/for}
~~~
4、雜項標簽
標簽描述literal原樣輸出php 使用原生php代碼
~~~
{literal}
????{$name}?這里$name不會被當作變量,而是普通字符
????{/literal}
????{php}
????echo?'歐陽克';
????{/php}
~~~
## 九、示例
controller代碼
> namespace app\\controller;
>
> use think\\facade\\View;
>
> class Index{
>
> ? ? public function index(){
>
> ? ? ? ? $title = '商城';
>
> ? ? ? ? $login = '歐陽克';
>
> ? ? ? ? $left = \[
>
> ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? 'title' => '商品管理',
>
> ? ? ? ? ? ? ? ? 'lists' => \[
>
> ? ? ? ? ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'id' => 1,
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'title' => '商品列表',
>
> ? ? ? ? ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'id' => 2,
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'title' => '商品分類',
>
> ? ? ? ? ? ? ? ? ? ? \]
>
> ? ? ? ? ? ? ? ? \]
>
> ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? 'title' => '用戶管理',
>
> ? ? ? ? ? ? ? ? 'lists' => \[
>
> ? ? ? ? ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'id' => 3,
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'title' => '用戶列表',
>
> ? ? ? ? ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'id' => 4,
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'title' => '購物車',
>
> ? ? ? ? ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'id' => 5,
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'title' => '用戶地址',
>
> ? ? ? ? ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'id' => 6,
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'title' => '訂單管理',
>
> ? ? ? ? ? ? ? ? ? ? \]
>
> ? ? ? ? ? ? ? ? \]
>
> ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? 'title' => '后臺管理',
>
> ? ? ? ? ? ? ? ? 'lists' => \[
>
> ? ? ? ? ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'id' => 7,
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'title' => '管理員列表',
>
> ? ? ? ? ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'id' => 8,
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'title' => '個人中心',
>
> ? ? ? ? ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'id' => 9,
>
> ? ? ? ? ? ? ? ? ? ? ? ? 'title' => '左側菜單列',
>
> ? ? ? ? ? ? ? ? ? ? \]
>
> ? ? ? ? ? ? ? ? \]
>
> ? ? ? ? ? ? \]
>
> ? ? ? ? \];
>
> ? ? ? ? $right = \[
>
> ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? 'id' => 1,
>
> ? ? ? ? ? ? ? ? 'title' => '熙世界2019秋冬新款長袖杏色上衣連帽寬松刺繡文藝落肩袖加厚衛衣BF風',
>
> ? ? ? ? ? ? ? ? 'cat' => '女裝',
>
> ? ? ? ? ? ? ? ? 'price' => 189,
>
> ? ? ? ? ? ? ? ? 'discount' => 6,
>
> ? ? ? ? ? ? ? ? 'status' => 1,
>
> ? ? ? ? ? ? ? ? // 'status' => '開啟',
>
> ? ? ? ? ? ? ? ? 'add\_time' => '2019-12-12',
>
> ? ? ? ? ? ? ? ? // 'add\_time' => '1576080000'
>
> ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? 'id' => 2,
>
> ? ? ? ? ? ? ? ? 'title' => '秋水伊人雙面呢冬裝2019年新款女裝氣質西裝領撞色羊毛大衣外套女',
>
> ? ? ? ? ? ? ? ? 'cat' => '女裝',
>
> ? ? ? ? ? ? ? ? 'price' => 699,
>
> ? ? ? ? ? ? ? ? 'discount' => 7,
>
> ? ? ? ? ? ? ? ? 'status' => 1,
>
> ? ? ? ? ? ? ? ? // 'status' => '開啟',
>
> ? ? ? ? ? ? ? ? 'add\_time' => '2019-12-12',
>
> ? ? ? ? ? ? ? ? // 'add\_time' => '1576080000'
>
> ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? 'id' => 3,
>
> ? ? ? ? ? ? ? ? 'title' => '微彈中高腰直腳牛仔褲男',
>
> ? ? ? ? ? ? ? ? 'cat' => '男裝',
>
> ? ? ? ? ? ? ? ? 'price' => 179,
>
> ? ? ? ? ? ? ? ? 'discount' => 8,
>
> ? ? ? ? ? ? ? ? 'status' => 0,
>
> ? ? ? ? ? ? ? ? // 'status' => '開啟',
>
> ? ? ? ? ? ? ? ? 'add\_time' => '2019-12-12',
>
> ? ? ? ? ? ? ? ? // 'add\_time' => '1576080000'
>
> ? ? ? ? ? ? \],
>
> ? ? ? ? ? ? \[
>
> ? ? ? ? ? ? ? ? 'id' => 1,
>
> ? ? ? ? ? ? ? ? 'title' => '男士長袖t恤秋季圓領黑白體恤T 純色上衣服打底衫',
>
> ? ? ? ? ? ? ? ? 'cat' => '男裝',
>
> ? ? ? ? ? ? ? ? 'price' => 99,
>
> ? ? ? ? ? ? ? ? 'discount' => 9,
>
> ? ? ? ? ? ? ? ? 'status' => 1,
>
> ? ? ? ? ? ? ? ? // 'status' => '開啟',
>
> ? ? ? ? ? ? ? ? 'add\_time' => '2019-12-12',
>
> ? ? ? ? ? ? ? ? // 'add\_time' => '1576080000'
>
> ? ? ? ? ? ? \],
>
> ? ? ? ? \];
>
> ? ? ? ? View::assign(\[
>
> ? ? ? ? ? ? 'title'? => $title,
>
> ? ? ? ? ? ? 'login' => $login,
>
> ? ? ? ? ? ? 'left' => $left,
>
> ? ? ? ? ? ? 'right' => $right
>
> ? ? ? ? \]);
>
> ? ? ? ? return View::fetch();
>
> ? ? }
>
> }
view代碼:head.html
>
>
>
>
>
>
> ? ? {$title}--后臺管理系統
>
> ? ?
>
> ? ?
>
> ? ?
>
> ? ? ? ? .header{width:100%;height: 50px;line-height: 50px;background: #2e6da4;color:#ffffff;}
>
> ? ? ? ? .title{margin-left: 20px;font-size: 20px;}
>
> ? ? ? ? .userinfo{float: right;margin-right: 10px;}
>
> ? ? ? ? .userinfo a{color:#ffffff;}
>
> ? ? ? ? .menu{width: 200px;background:#333744;position:absolute;}
>
> ? ? ? ? .main{position: absolute;left:200px;right:0px;}
>
>
>
> ? ? ? ? .layui-collapse{border: none;}
>
> ? ? ? ? .layui-colla-item{border-top:none;}
>
> ? ? ? ? .layui-colla-title{background:#42485b;color:#ffffff;}
>
> ? ? ? ? .layui-colla-content{border-top:none;padding:0px;}
>
>
>
> ? ? ? ? .content span{background: #009688;margin-left: 30px;padding: 10px;color:#ffffff;}
>
> ? ? ? ? .content div{border-bottom: solid 2px #009688;margin-top: 8px;}
>
> ? ? ? ? .content button{float: right;margin-top: -5px;}
>
> ? ?
>
>
>
>
>
> ? ?
>
> ? ? ? ? {$title}--后臺管理系統
>
> ? ? ? ? 【{$login}】退出
>
> ? ?
view代碼:left.html
>
>
> ? ?
>
> ? ? ? ? {foreach $left as $k=>$left\_v}
>
> ? ? ? ? ? ?
>
> ? ? ? ? ? ? ? ? {$left\_v.title}
>
> ? ? ? ? ? ? ? ?
>
> ? ? ? ? ? ? ? ? ? ?
>
> ? ? ? ? ? ? ? ? ? ? ? ? {foreach $left\_v\['lists'\] as $lists\_v}
>
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? {$lists\_v.title}
>
> ? ? ? ? ? ? ? ? ? ? ? ? {/foreach}
>
> ? ? ? ? ? ? ? ? ? ?
>
> ? ? ? ? ? ? ? ?
>
> ? ? ? ? ? ?
>
> ? ? ? ? {/foreach}
>
> ? ?
>
>
view代碼:bottom.html
>
>
>
>
>
>
> ? ? layui.use(\['element','layer','laypage'\], function(){
>
> ? ? ? ? var element = layui.element;
>
> ? ? ? ? var laypage = layui.laypage;
>
> ? ? ? ? $ = layui.jquery;
>
> ? ? ? ? layer = layui.layer;
>
> ? ? ? ? resetMenuHeight();
>
> ? ? });
>
> ? ? // 重新設置菜單容器高度
>
> ? ? function resetMenuHeight(){
>
> ? ? ? ? var height = document.documentElement.clientHeight - 50;
>
> ? ? ? ? $('#menu').height(height);
>
> ? ? }
>
>
view代碼:index.html
> {include file="public/head" /}
>
> {include file="public/left" /}
>
>
>
> ? ?
>
> ? ? ? ? 商品列表
>
> ? ? ? ?
>
> ? ?
>
> ? ?
>
> ? ? ? ?
>
> ? ? ? ? ? ?
>
> ? ? ? ? ? ? ? ? ID
>
> ? ? ? ? ? ? ? ? 商品標題
>
> ? ? ? ? ? ? ? ? 分類
>
> ? ? ? ? ? ? ? ? 原價
>
> ? ? ? ? ? ? ? ? 折扣
>
> ? ? ? ? ? ? ? ? 現價
>
> ? ? ? ? ? ? ? ? 庫存
>
> ? ? ? ? ? ? ? ? 狀態
>
> ? ? ? ? ? ? ? ? 添加時間
>
> ? ? ? ? ? ?
>
> ? ? ? ?
>
> ? ? ? ?
>
> ? ? ? ? ? ? {volist name="right" id="right\_v"}
>
> ? ? ? ? ? ? ? ?
>
> ? ? ? ? ? ? ? ? ? ? {$right\_v.id}
>
> ? ? ? ? ? ? ? ? ? ? {$right\_v.title}
>
> ? ? ? ? ? ? ? ? ? ? {$right\_v.cat}
>
> ? ? ? ? ? ? ? ? ? ? {$right\_v.price}
>
> ? ? ? ? ? ? ? ? ? ? {$right\_v.discount}
>
> ? ? ? ? ? ? ? ? ? ?
>
> ? ? ? ? ? ? ? ? ? ? ? ? {if $right\_v.discount!=0}
>
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? {$right\_v.price\*($right\_v.discount/10)}
>
> ? ? ? ? ? ? ? ? ? ? ? ? {else/}
>
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? {$right\_v.price}
>
> ? ? ? ? ? ? ? ? ? ? ? ? {/if}
>
> ? ? ? ? ? ? ? ? ? ?
>
> ? ? ? ? ? ? ? ? ? ? {$right\_v.stock}
>
> ? ? ? ? ? ? ? ? ? ? {if $right\_v\['status'\]==1}開啟{else/}關閉{/if}
>
> ? ? ? ? ? ? ? ? ? ? {$right\_v.add\_time|date='Y-m-d'}
>
> ? ? ? ? ? ? ? ?
>
> ? ? ? ? ? ? {/volist}
>
> ? ? ? ?
>
> ? ?
>
>
>
> {include file="public/bottom" /}