# 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" /}