zoukankan      html  css  js  c++  java
  • thinkphp5.0学习笔记(四)

    1、视图模板布局

      a、模板替换

    // 视图输出字符串内容替换
    'view_replace_str'       => [
        '__HOME__' => '/static/home/public',
        '__ADMIN__'=> '/static/admin/public'
    ],

     这是全局定义,如果需要局部定义,那么可以使用以下的方法

    public function index(){
        //这里的第一个参数是指定模板,第二个参数是进行传值, 第三个参数是指定局部的静态常量
        $this->fetch('index',
            ['name' => 'aa', 'age'=> 20],
            ['__HOME__' => '/static/home/public', '__ADMIN__' => '/static/admin/public']);
    }

      b、模板传值

    public function index(){
        //方法一
        $this->assign('name', 'bbb');
        $this->assign(['name' => 'aaa', 'age' => 20]);
        $this->fetch();
        //方法二
        $this->fetch('index', ['name' => 'ccc', 'age'=> 30]);   //注意渲染模板的方法在笔记一
    }

       c、指定模板

     

     注意: 一般情况下,引擎会自动查找指定目录下的html后缀的文件,当如果是php的情况,那么就需要修改局部的php引擎,可以使用$this->engine('php')来修改同时如果需要访问别的目录下的文件,那么可以使用以下的语句进行指定

    return $this->engine('php')->fetch('test/abc'); //表示的是test文件夹下的abc.php文件

     如果需要跨模块调用的情况下,可以使用以下的方法

    return $view->fetch('admin@user/add');

     2、模板标签

     包含文件

    {include file="Public/header" title="$title" keywords="开源WEB开发框架" /}    //public 表示模块文件夹, 需要填写

     模板布局的模板页面

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
    {include file='common/first'}
    {__CONTENT__}
    {include file='common/second'}
    </body>
    </html>

    文件部份

    {layout name='common/all'}        //表示在common文件夹下面的all.html
    <div>this is index html content</div>

    3、模板继承

    common/main.html总模板下的内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {block name='first'}{/block}
    <hr>
    {block name='second'}{/block}
    <hr>
    {block name='third'}{/block}
    </body>
    </html>

    模板内需要替换的内容

    {extend name='common/main'} {//继承了common文件夹下面的main.html}
    {block name='first'}<h3>这个是替换first部份的内容</h3>{/block}
    {block name='second'}<div>这个是替换second部份的内容</div>{/block}
    {block name='third'}<b>这个是替换third部份的内容{$name}{$age}</b>{/block}

    注意:模板可以多级继承,比如B继承了A,而C又继承了B,最终C中的区块会覆盖B和A中的同名区块,但C和B中的区块必须是A中已定义过的。子模板中的区块定义顺序是随意的,模板继承的用法关键在于基础模板如何布局和设计规划了,如果结合原来的布局功能,则会更加灵活。

    4、模板的基本语法

    <!--输出变量-->
    <span>{$name}{$age}</span>
    <!--如果是数组的情况-->
    <span>{$data.name}{$data.age}</span>
    <!--也可以使用另外一种数组表示方式-->
    <span>{$data['name']}{$data['age']}</span>
    <!--系统变量的输出-->
    {$Think.server.script_name} <!--输出$_SERVER['SCRIPT_NAME']变量-->
    {$Think.session.user_id}<!--输出$_SESSION['user_id']变量-->
    {$Think.get.pageNumber}<!--输出$_GET['pageNumber']变量-->
    {$Think.cookie.name}<!--输出$_COOKIE['name']变量-->
    
    <!--常量的输出-->
    {$Think.const.APP_PATH}
    <!--配置的输出-->
    {$Think.config.default_module}
    {$Think.config.default_controller}
    <!--语言的输出-->
    {$Think.lang.page_error}
    {$Think.lang.var_error}
    
    <!--请求参数的输出-->
    <!--调用Request对象的get方法 传入参数为id-->
    {$Request.get.id}
    <!--调用Request对象的param方法 传入参数为name-->
    {$Request.param.name}
    <!--调用Request对象的param方法 传入参数为user.nickname-->
    {$Request.param.user.nickname}
    <!--调用Request对象的root方法-->
    {$Request.root}
    <!--、调用Request对象的root方法,并且传入参数true-->
    {$Request.root.true}
    <!--调用Request对象的path方法-->
    {$Request.path}
    <!--调用Request对象的module方法-->
    {$Request.module}
    <!--调用Request对象的controller方法-->
    {$Request.controller}
    <!--调用Request对象的action方法-->
    {$Request.action}
    <!--调用Request对象的ext方法-->
    {$Request.ext}
    <!--调用Request对象的host方法-->
    {$Request.host}
    <!--调用Request对象的ip方法-->
    {$Request.ip}
    <!--调用Request对象的header方法-->
    {$Request.header.accept-encoding}
    
    <!--使用函数-->
    {:substr(strtoupper(md5($name)),0,3)}
    <span>{:request()->isGet()}</span>
    <!--如果使用url可以用-->
    <a href="{:url('index/index')}">this is index</a>
    
    <!--使用默认值-->
    {$user.nickname|default="这家伙很懒,什么也没留下"}
    
    <!--原样输出-->
    {literal}
    Hello,{$name}!
    {/literal}
    
    <!--模板注释-->
    {/* 注释内容 */ } 或 {// 注释内容 } 

     5、常用的内置标签

    a、volist

    <!--<?php foreach($data as $key => $val):?>-->
    <!--    <p><?php echo $key?><?php echo $val['id']?><?php echo $val['name']?></p>-->
    <!--<?php endforeach?>-->
    
    {volist name='data', id='val'}
        <p>{$key}{$val.id}{$val.name}{$val.sex}</p>
    {/volist}
    <!--以上两种示例的结果是一样的volist name是表示输出的变量, id则相当于foreach里的$val-->

     如果需要在volist中进行取余操作

    {volist name='data' id='val', mod=2}
        {eq name='mod' value='0'}<div>{$val.name}</div>{/eq}
        {eq name='mod' value='1'}<div>{$val.sex}</div>{/eq}
    {/volist}

     如果需要在volist中进行截取指定的数组长度那么可以采用以下的方法,添加offset, length

    {volist name='data' id='val' mod='2' offset='3' length='2'}
        {eq name='mod' value='0'}<div>{$val.name}</div>{/eq}
        {eq name='mod' value='1'}<div>{$val.sex}</div>{/eq}
    {/volist}

     volist为空时候的输出

    <!--为空的时候输出提示:-->
    {volist name="list" id="vo" empty="暂时没有数据" }
    {$vo.id}|{$vo.name}
    {/volist}
    <!--empty属性不支持直接传入html语法,但可以支持变量输出,例如:-->
    $this->assign('empty','<span class="empty">没有数据</span>');
    $this->assign('list',$list);
    name          需要遍历的数据
    id            类似于foreach中 value
    offset       截取数据起始位置
    length        截取数据的个数
    mod           奇偶数
    empty         数据为空的使用
    key           编号

    b、比较标签符,例子同上

    {比较标签 name="变量" value="值"}
    内容
    {/比较标签}

     在模板视图中,不能出来> = < == != 等符号,需要用标签来替代

    {for start='0' end='10' name='i'}
        {egt name='i' value='5'}这个是大于等于5的值{$i}<br/>{/egt}
        {lt name='i' value='5'}这个是小于5的值{$i}<br/>{/lt}
    {/for
    标签含义
    eq或者 equal 等于
    neq 或者notequal 不等于
    gt 大于
    egt 大于等于
    lt 小于
    elt 小于等于
    heq 恒等于
    nheq 不恒等于

    c、foreach循环

    <!--name表示数据 item相当于key key相当于$key,也可以直接$key进行调用-->
    {foreach name='data' item='val' key='k'}
        <div>{$k}---{$val.id}{$val.name}{$val.age}</div>
    {/foreach}
    name      需要遍历的数据
    item      类似于foreach中的value
    key       类似于foreach中的key

     d、for循环

    start         开始值
    end           结束值
    comparison    比较条件
    step          步数
    name          循环变量名 默认 i, 相当于php中的$i
    
    {for start="0" end="10" comparison="elt" step="2" name="abc"}
        <p>{$abc}</p>
    {/for}
    
    {for start="10" end="0" comparison="gt" step="-1"}
        <p>{$i}</p>
    {/for}

     f、witch标签

    {switch 变量 }
        {case value1 }输出内容1{/case}
        {case value2}输出内容2{/case}
        {default /}默认情况
    {/switch}
    
    <!--示例-->
    {switch User.level}
        {case 1}value1{/case}
        {case 2}value2{/case}
        {default /}default
    {/switch}

    g、if标签

    {if 表达式}value1
    {elseif 表达式 /}value2
    {else /}value3
    {/if}
    
    <!--示例-->
    {if ( $name == 1) OR ( $name > 100) } value1
    {elseif $name == 2 /}value2
    {else /} value3
    {/if}
    
    <!--也可以使用php的代码-->
    {if strtoupper($user['name']) == 'THINKPHP' }ThinkPHP
    {else /} other Framework
    {/if}

    h、empty标签

    empty标签用于判断某个变量是否为空,用法:
    
    {empty name="name"}
    name为空值
    {/empty}
    如果判断没有赋值,可以使用:
    
    {notempty name="name"}
    name不为空
    {/notempty}
  • 相关阅读:
    linux软件安装方式
    docker 安装 jenkins touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
    [ERR] Node goodsleep.vip:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    Linux 常用命令 服务器间scp 用户 export 创建文件、软连接
    redis 安装 集群 主从 哨兵 docker
    WPF密码框中禁止复制、粘贴
    Application 统计在线人数
    【转义字符】HTML 字符实体&lt; &gt: &amp;等
    SQL语句统计每天的数据
    正则表达式计算代码数
  • 原文地址:https://www.cnblogs.com/rickyctbu/p/11581948.html
Copyright © 2011-2022 走看看