• 内置标签[1]


    ThinkPHP 模版中的内置标签,所谓内置标签就是模版引擎 提供的一组可以完成控制、循环和判断功能的类似 HTML 语法的标签。

    一. 判断比较

    ThinkPHP 内置了 IF 标签用于在模版中进行条件判断。

    首先在  Home/controller/UserController.class.php  内插入以下代码:

    1 class UserController extends Controller {
    2         public function index() {
    3             $user='蜡笔小新';
    4             $this->assign('user',$user);
    5             $this->display();
    6         }
    7         
    8 }

    然后在 View/User/index.html 中写入以下代码:

     1 <html>
     2 <head></head>
     3 <body>
     4 
     5 <if condition="$user eq '蜡笔小新'">
     6     小新
     7     <elseif condition ="$user eq '黑崎一护'" />
     8     一护
     9     <else />
    10     错误
    11 </if>
    12 
    13 </body>
    14     

    编译后在 Runtime/Cache/Home 里看到的编译后的代码为:

     1 <?php if (!defined('THINK_PATH')) exit();?>
     2 <html>
     3 <head></head>
     4 <body>
     5 
     6 <?php if($user == '蜡笔小新'): ?>小新
     7     <?php elseif($user == '黑崎一护'): ?>
     8     一护
     9     <?php else: ?>
    10     错误<?php endif; ?>
    11 
    12 </body>
    13 </html>

    也就是输出时,ThinkPHP自动编译为PHP原生的代码:

    PS:condition 属性中支持 eq 等判断表达式,由于会导致模版解析混淆,所以不支持“>”、“<”等表达式,但是支持"="

    1 //condition 条件里可以使用 PHP 函数
    2 <if condition="mb_substr($user,0,3,'UTF-8') eq '蜡笔小'">
    1 //condition 条件里使用点语法,智能判断数组或对象
    2 <if condition="$data.user eq '蜡笔小新'">
    1 //condition 条件里使用冒号语法,直接使用对象
    2 <if condition="$data:user eq '蜡笔小新'">

    这是当如果是表单提交过来的user是“蜡笔小新”,则符合条件,

    也可是 http://localhost/demo39/Home/User/index.html?user=蜡笔小新 ,这样也能得到user的变量

    1 //condition 条件里使用系统变量
    2 <if condition="$Think.get.user eq '蜡笔小新'">

    PS:由于 if 标签的 condition 属性里面基本上使用的是 php 语法,尽可能使用判断标签
    Switch 标签会更加简洁,原则上来说,能够用 switch 和比较标签解决的尽量不用 if 标签
    完成。因为 switch 和比较标签可以使用变量调节器和系统变量。如果某些特殊的要求下面,

    IF 标签仍然无法满足要求的话,可以使用原生 php 代码或者 PHP 标签来直接书写代码。

    在 View/User/index.html 中写入以下代码:

     1 <html>
     2 <head></head>
     3 <body>
     4 
     5 <switch name="user">
     6     <case value="蜡笔小新">小新</case>
     7     <case value="黑崎一护">一护</case>
     8     <default/>错误
     9 </switch>
    10 
    11 </body>
    12 </html>    

    需要注意的是: <switch name="user"> 中的user前面是没有“$”符号的。

    这时 Runtime/Cache/Home 中的编译为:

    1 <?php switch($user): case "蜡笔小新": ?>小新<?php break;?>
    2     <?php case "黑崎一护": ?>一护<?php break;?>
    3     <?php default: ?>错误<?php endswitch;?>

    也就是在编译时会自动加上  break; 语句

    默认情况下,case 会自动添加 break 语句防止穿透,如果你就是想要穿透,那么可以去
    除 break。当然,绝大部分不需要设置 break。

    1 //去除 break
    2 <case value="蜡笔小新" break="0">小新</case>

    这时 <case value="黑崎一护">一护</case> 中没有加上 break="0" ,但是浏览器中还是会输出:

    ThinkPHP 提供了一组比较标签用于简单的变量比较,复杂的判断条件可以用 IF 标签替换。

                                                               比较标签

    比较标签 含义
    eq 或 equal  等于
    neq 或 notequal 不等于
    gt 大于
    egt 大于等于
    lt 小于
    elt  小于等于
    heq 恒等于
    nheq 不恒等于
    1 //控制器变量$user=蜡笔小新,输出小新
    2 <eq name="user" value="蜡笔小新">小新</eq>

    PS:name 的值和 IF 语句一样,可以是变量、数组、对象、函数或系统变量,其他比较标签使用方法类似,这里不在赘述。

    比较标签还提供了一个统一标签 compare,比较类型通过 type 属性完成。

    1 //compare 统一方法
    2 <compare type="eq" name="user" value="蜡笔小新">小新</compare>

    ThinkPHP 提供了一组范围判断标签:in、notin、between、notbetween 四个标签,都用
    于判断变量是否在某个范围中。

     在 Home/controller/UserController.class.php 中插入以下代码:

    1 class UserController extends Controller {
    2         public function index() {
    3             $id='3';
    4             $this->assign('id',$id);
    5             $this->display();
    6         }    
    7 }

    然后在 View/User/index.html 中的代码为:

    1 <in name="id" value="1,2,3">
    2     id在范围内
    3     <else />
    4     id不在范围内
    5 </in>

    notin 标签,正好相反

     Home/controller/UserController.class.php 中的代码是一样的,然后在 View/User/index.html 中的代码则是相反的:

    1 <notin name="id" value="1,2,3">
    2     id不在范围内
    3     <else />
    4     id在范围内
    5 </notin>

    between标签,从哪里到哪里的范围

      Home/controller/UserController.class.php 中的代码是一样的,然后在 View/User/index.html 中的代码如下:

    1 <between name="id" value="1,10">
    2     id在范围内
    3     <else />
    4     id不在范围内
    5 </between>

    notbetween标签,从哪里到哪里的范围

     Home/controller/UserController.class.php 中的代码是一样的,然后在 View/User/index.html 中的代码如下:

    1 <notbetween name="id" value="1,10">
    2     id在范围内
    3     <else />
    4     id不在范围内
    5 </notbetween>

    range标签,可以统一in、notin、between和notbetween

     Home/controller/UserController.class.php 中的代码是一样的,然后在 View/User/index.html 中的代码如下:

    1 <range name="id" value="1,2,3" type="in" >
    2     id在范围内
    3     <else />
    4     id不在范围内
    5 </range>

    name值可以是系统变量

    这时是不需要  Home/controller/UserController.class.php 中的代码的,然后在 View/User/index.html 中的代码如下:

    1 <in name="Think.get.id" value="1,2,3">
    2     id在范围内
    3     <else />
    4     id不在范围内
    5 </in>

    注意,这时的 name 中的 Think 前是不要加上"$"符号的,然后在url后加上 ?id=1 ,

    整个的url的形式为: http://localhost/demo39/Home/User/index.html?id=1 

    value值可以是变量或系统变量

     Home/controller/UserController.class.php 中的代码是一样的,然后在 View/User/index.html 中的代码如下:

    1 <in name="id" value="$Think.get.range">
    2     id在范围内
    3     <else />
    4     id不在范围内
    5 </in>

    记住这时的 value 中的 Think 前面是要加上"$"符号的,这时所在的范围是 $Think.get.range ,

    则我们可以在url的最后加上 ?range=1,2,3 ,整个url为: http://localhost/demo39/Home/User/index.html?range=2,3,4 ,即可测试成功

    ThinkPHP 模版提供了一组用于判断变量的标签。

    断变量是否已赋值,赋值了就输出,空字符串也算赋值

    1 <present name="user">
    2      user已赋值
    3    <else />
    4     user未赋值
    5 </present>
    1 //判断变量是否已赋值,没有创建或赋值为null,都算没有值
    2 <notpresent name="user">user 还没有值</notpresent>
    1 //判断变量是否已赋值,系统变量
    2 <present name="Think.get.user">$_GET['user']已赋值</present>
    1 //判断变量是否为空,空则输出
    2 <empty name="user">user 为空值</empty>
    1 //判断变量是否为空,不空则输出
    2 <notempty name="user">user不为空值</notempty>
    1 //判断变量是否为空,系统变量
    2 <empty name="Think.get.user">$_GET['user']为空值</empty>
    1 //判断常量是否定义,定义了输出
    2 <defined name="APP_PATH">APP_PATH 常量已定义</defined>
    1 //判断常量是否定义,没定义输出
    2 <notdefined name="APP_PATH">APP_PATH 常量未定义</notdefined>
    1 //判断常量是否定义,组合
    2 <defined name="APP_PATH">
    3     APP_PATH常量已定义
    4   <else />
    5     APP_PATH常量未定义
    6 </defined>
  • 相关阅读:
    php上传进度条
    array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
    password_hash 与 password_verify
    这是一个微信带参数的二维码,自定义菜单,与图文回复
    go to 语句用起来还是挺方便的
    初次使用海豚php的一个例子
    图片下载
    一对一的关联映射
    延迟加载
    proxy和proxy-no的策略取值区别
  • 原文地址:https://www.cnblogs.com/jacson/p/4506540.html
Copyright © 2020-2023  润新知