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}
  • 相关阅读:
    js和c#小数四舍五入
    c#连接关闭了,事务并没有关闭
    SQLNET跟踪tnsping过程
    关闭listener监听日志
    DBMS_RANDOM 用法
    获取oracle当前系统设置了哪些事件
    oracle获取主机服务器IP
    动态性能视图v$session_longops
    PRINT_TABLE 列以行形式显示
    mac 开启ntfs 权限
  • 原文地址:https://www.cnblogs.com/rickyctbu/p/11581948.html
Copyright © 2011-2022 走看看