ThinkPHP6 模板引擎普通标签中,模板引擎运算符函数,循环标签,判断标签的使用,及一些特殊标签

news2025/1/19 3:15:57

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标记。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/523521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 安装 JDK、MySQL、Tomcat(图文并茂)

所需资料 下载 1.1 软件安装方式 在Linux系统中&#xff0c;安装软件的方式主要有四种&#xff0c;这四种安装方式的特点如下&#xff1a; 安装方式特点二进制发布包安装软件已经针对具体平台编译打包发布&#xff0c;只要解压&#xff0c;修改配置即可rpm安装软件已经按照re…

Unity里URP项目的介绍和创建

大家好&#xff0c;我是阿赵&#xff0c;接下来会介绍一下URP的使用 一、URP的介绍 URP(Universal Render Pipeline)通用渲染管线&#xff0c;是Unity在2019.3版本之后推出的一种新的渲染管线。 对比起默认的渲染管线&#xff0c;他的使用上会产生了一些变化&#xff0c;包括…

RS485电路及程序设计

一、电路原理图 图中 A、B 总线接口&#xff0c;用于连接 485 总线。RO 是接收输出端&#xff0c;DI 是发送数据收入端&#xff0c;RE是接收使能信号&#xff08;低电平有效&#xff09;&#xff0c;DE 是发送使能信号&#xff08;高电平有效&#xff09;。RE DE接在一起就是高…

jenkins安装配置--持续集成

目录 1.什么是持续集成 1.1持续集成 Continuous integration &#xff0c;简称CI 1.2持续集成具有的特点&#xff1a; 1.3持续集成的作用 2.jenkins简介 2.1概述 2.2特点 3.jenkins安装 1.下载Jenkins 2.下载jdk 3.网盘安装包载 4.创建软件安装目录 5.上传jdk和Jen…

C-内存管理

内存管理 堆,栈,静态区 c程序地址空间分布规则: 栈是从高地址向低地址延伸的,后创建的变量,后入栈,那么地址就越小. 静态变量,作用域不变,声明周期发生改变.本质原因是存储位置发生改变.编译器编译的时候放到了全局数据区. #include<stdio.h> #include<stdlib.h>…

虾皮Shopee商品详情接口(item_get-根据ID取商品详情)代码封装

item_get-根据ID取商品详情接口 通过代码封装该接口可以拿到商品标题&#xff0c;商品价格&#xff0c;商品促销信息&#xff0c;商品优惠价&#xff0c;商品库存&#xff0c;sku属性&#xff0c;商品图片&#xff0c;desc图片&#xff0c;desc描述&#xff0c;sku图片&#xf…

基于阿里云服务器安装宝塔Linux面板详细流程(有图)

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云百科以ECS云服务器CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账…

JS数据分组

JS对数据进行分组_js数据分组_柳宁依的博客-CSDN博客 原理没看懂&#xff0c;增加分组显示数据部分。 <html> <head> <style> select { display: block; margin: auto; } table { border-collapse: collapse; margin: auto; } th, td { border: 1px solid b…

“裸奔”时代下,我们该如何有效应对网络攻击、数据泄露和隐私侵犯

随着互联网的普及&#xff0c;越来越多的个人信息被上传到互联网上&#xff0c;而网络攻击、数据泄露和隐私侵犯等问题也日益严重。在这个“裸奔”时代&#xff0c;如何保护我们的网络隐私成为了一项紧迫的任务。本文将介绍一些实用的技巧和工具&#xff0c;帮助我们有效应对网…

不强制存储的ListModel和ComboBoxModel

主方法代码&#xff1a; package com.aynu.layout;import com.aynu.model.NumberComboBoxListModel; import com.aynu.model.NumberListModel;import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import j…

从零开始 Spring Boot 28:资源

从零开始 Spring Boot 28&#xff1a;资源 图源&#xff1a;简书 (jianshu.com) Resource 接口 Spring中的资源被抽象为一个Resource接口&#xff1a; public interface Resource extends InputStreamSource {boolean exists();boolean isReadable();boolean isOpen();boole…

【人像抠图】使用vs2022,onnxruntime框架进行部署(视频和多图片处理)

一、人像抠图的应用场景 1. 图像编辑:在图像编辑软件中,人像抠图是常用操作之一。通过抠图可以将人物从原背景中分离出来,放到新背景中,实现人物换背景的效果。这在电影后期特效、游戏角色置换等领域有很广泛的应用。 2. 视频特效:在视频编辑与特效制作中,人像抠图也是关键技术…

Python的标准库argparse讲解

argparse 是 Python 的标准库之一&#xff0c;用于解析命令行参数。通过 argparse&#xff0c;你可以轻松定义你的脚本或应用程序所需的命令行参数&#xff0c;并从命令行中获取这些参数的值。 import argparse# 创建解析器 parser argparse.ArgumentParser()# 添加命令行参数…

【react 全家桶】高级指引(下)

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录 13【react高级指引&#xff08;下&…

是哟Git时报错OpenSSL SSL_read: Connection was reset, errno 10054

文章目录 修改hosts的ip多尝试解除SSL验证 报错如下所示 遇到这个问题首先可以考虑开魔法或者开魔法加换个网比如开手机热点 解除SSL验证我没有试过, 我就在hosts文件中加上了ip的配置就好了 修改hosts的ip 根据网上的教程, 我试了试修改C盘中hosts文件的GitHub相关访问域名的…

QgsPoint类

在 QGIS 中&#xff0c;QgsPoint 类是用于表示二维或三维点的类。它由 X、Y 和 Z 坐标组成&#xff0c;并且可以带有一个可选的 M 值&#xff08;也称为测量值&#xff09;。以下是 QgsPoint 类的主要参数介绍&#xff1a; x&#xff1a;表示点的横向坐标值。y&#xff1a;表示…

在 Windows 上安装 scoop

一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让我们一起学习在在 Windows 上安装 scoop。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、 scoop是什么 windows下的安装源搜索工具&#xff0c;有点类似centos下的yum和Ubuntu下的apt。用这个拉下来安装…

路径规划算法:基于粒子群优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于粒子群优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于粒子群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

100+套大数据可视化模板

由于公司项目里面用到一个数据可视化大屏页面&#xff0c;自己网上各种谷歌百度&#xff0c;发现资源良莠不齐&#xff0c;而且大多数都是收费的&#xff0c;甚至一个页面一收费的那种。 前前后后自己不管是付费的还是免费的收集了不少&#xff0c;于是自己打算整理下&#xf…

应届生如何在职场中提高竞争力?这些方法和策略不容错过!

当前就业形势严峻&#xff0c;对于即将步入职场的应届生来说&#xff0c;提高自己的竞争力显得尤为重要。那么&#xff0c;要如何提高自己的职场竞争力呢&#xff1f;本文将为你分享一些有效的方法和策略&#xff0c;帮助你在职场中获得更好的发展。 一、提高自身素质 职场中&…