入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

thinkphp5.0学习(九):TP5.0视图和模板

创建时间:2017-11-30 投稿人: 浏览次数:849

一、视图

1.加载页面

1.继承系统控制器类
    return $this->fetch(参数1,参数2,参数3,参数4);
    参数1(字符串):模板渲染
    参数2(数组):模板赋值
    参数3(数组):模板替换
2.使用助手函数
    return view();
    参数与fetch相同
3.使用view类(不建议使用)
    $view=new View();
    return $view->fetch();

2.模板赋值

1.控制器类中的assign方法
    $this->assign("name",$name);
    $this->assign("city",$city);
    $this->assign(["name"=>$name,"city"=>$city]);
    return view();
2.通过fetch方法
    return $this->fetch("",["name"=>$name,"city"=>$city]);
3.助手函数
    return view("",["name"=>$name,"city"=>$city]);
4.对象赋值
    $this->view->name="甜甜";
    $this->view->city="太原";
    return view();

3.模板替换

1.配置文件更改(全局替换,所有页面中都被替换)(config文件中)
    // 视图输出字符串内容替换
    // 只有页面被替换,也就是在php页面中获取不到__HOMES__
    "view_replace_str"       => [
        "__HOMES__"=>"/static/home/public"
    ],
2.部分替换
    1.fetch方法
    // fetch参数:页面,变量分配,视图输出字符串内容替换
        return $this->fetch("",[],["__HOMES__"=>"/static/home/public"]);
    2.助手函数
        return view("",[],["__HOMES__"=>"/static/home/public"]);

4.模板渲染

1.默认加载当前模块,当前控制器,当前方法对应的页面
        return $this->fetch();
2.指定加载的页面
        // 加载当前模块,当前控制器下,用户定义的页面
        return $this->fetch("jiazai");
        // 加载当前模块,user控制器下 jiazai页面
        return $this->fetch("user/jiazai");

二、模板

1.模板标签

1.普通标签(删除了runtime下的temp下的缓存文件再测试)

 // 模板引擎普通标签开始标记
 "tpl_begin"    => "{",
 // 模板引擎普通标签结束标记
 "tpl_end"      => "}",

2.标签库标签(删除了runtime下的temp下的缓存文件再测试)

 // 标签库标签开始标记
 "taglib_begin" => "}",
 // 标签库标签结束标记
 "taglib_end"   => "{",

{for start="1" end="10"}
{$i}
{/for}

2.输出变量

1.字符串

$this->assign("str","甜甜");
<h2>{$str}</h2>

2.数组

$data=[
    "name"=>"张三",
    "age"=>18,
    "sex"=>"男"
];
$this->assign("data",$data);

<h2>{$data["name"]}<h2>
<h2>{$data["age"]}<h2>
<h2>{$data["sex"]}<h2>

3.使用函数

//1.使用竖线,参数写在等于号后面
    {$data.name|md5} 
    <?php echo (md5($data["name"])); ?>

    {$time|date="y-m-d H:i:s",###}
    <?php echo (date("y-m-d H:i:s",$time)); ?>

    {$name|md5|strtoupper|substr=0,10}
    <?php echo (substr(strtoupper(md5($name)),0,10)); ?>
//2.冒号开始
    {:md5($pass)}
    {:date("Y-m-d H:i:s",$time)} 

4.默认值

{$user.nickname|default="这家伙很懒,什么也没留下"}

5.三元运算符

{$status? "正常" : "错误"}
{$status>2? "正常" : "错误"}

6.算数运算符

{$a}+{$b}={$a+$b}
{$a}-{$b}={$a-$b}
{$a}*{$b}={$a*$b}
{$a}/{$b}={$a/$b}
{$a}%{$b}={$a%$b}
{$a++}
{$b--}

在使用运算符的时候,不再支持常规函数用法,例如:

{$user.score+10} //正确的
{$user["score"]+10} //正确的
{$user["score"]*$user["level"]} //正确的
{$user["score"]|myFun*10} //错误的
{$user["score"]+myFun($user["level"])} //正确的

7.原样输出

{literal}
    Hello,{$name}!
{/literal}

8.系统变量

1.系统变量($Think开头)
    支持输出 $_SERVER、$_ENV、 $_POST、 $_GET、 $_REQUEST、$_SESSION和 $_COOKIE变量。
    <h2>{$_GET["id"]}</h2>
    <h2>{$Think.get.id}</h2>

    <h2>{$_SERVER["HTTP_HOST"]}</h2>
    <h2>{$_SERVER.HTTP_HOST}</h2>

    <h2>{$Think.SERVER.HTTP_HOST}</h2>
2.常量输出(常量详见附录常量参考)
    <h2>{$Think.const.app_path}</h2>
    <h2>{$Think.const.ds}</h2>
    <h2>{$Think.const.think_path}</h2>
    <h2>{$Think.const.is_win}</h2>
    <h2>{$Think.const.THINK_VERSION}</h2>
3.配置文件输出(查看配置文件)
    <h2>{$Think.config.app_namespace}</h2>
    <h2>{$Think.config.default_lang}</h2>

9.请求参数
支持直接使用request对象

{$Request.get.id}
{$Request.param.name}

以$Request.开头的变量输出会认为是系统Request请求对象的参数输出。
支持Request类的大部分方法,但只支持方法的第一个参数。

10.模板注释

{/* 注释内容 */ } 或 {// 注释内容 } 

{/* 这是模板
注释内容*/ }

11.页面包含(可以包含多次)

{include file="Public/header"}
    <div>body</div>
{include file="Public/footer"}

12.模板布局

1.在视图目录下新建文件layout.html(appadminview)
2.在layout页面中将所有的公共页面保留,非公共页面使用{__CONTENT__}替代(__CONTENT__只能存在一个)
3.页面中引入模板布局{layout name="layout" /}+非公共区域内容

13.模板继承

1.在视图目录下新建base.html
2.在base.html中对页面进行分割
    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>
            <div>
                {block name="nav"}{/block}
            </div>
            <div>
                {block name="menu"}{/block}
                {block name="main"}{/block}
            </div>
            <div>
                {block name="footer"}{/block}
            </div>
        </body>
    </html>
3.使用继承
    {extend name="base" /}
    {block name="nav"}
        {include file="public/header" /}
    {/block}
    {block name="menu"}
        {include file="public/menu" /}
    {/block}
    {block name="main"}
        {include file="public/content" /}
    {/block}
    {block name="footer"}
        {include file="public/footer" /}
    {/block}

14.内置标签

1.volist循环
    {volist name="data" id="val" offset="5" length="3"}
        <p>{$key}:{$val.id}:{$val.name}</p>
    {/volist}
    //区分奇数偶数
    {volist name="data" id="val" mod="2" empty="暂时没有数据"}
        {eq name="mod" value="0"}
            <p style="color: red;">{$key}:{$val.id}:{$val.name}</p>
        {/eq}
        {eq name="mod" value="1"}
            <p>{$key}:{$val.id}:{$val.name}</p>
        {/eq}
    {/volist}

    name   需要遍历的数据
    id     类似于foreach中的value
    offset   截取数据的起始位置
    length   截取数据的个数
    mod      奇数偶数
    empty    数据为空时使用
    key      编号

2.foreach循环
    {foreach name="data" item="val"}
        <p>{$key}{$val.id}{$val.name}</p>
    {/foreach}

    name 需要遍历的数据
    item 类似于foreach中的value
    key 类似于foreach中的key
3.for循环
    start   开始值
    end     结束值
    comparison   比较条件(参看下表),默认lt
    step         步数
    name         循环变量(默认i)
    //正序
    {for start="0" end="10" comparison="elt" step="2" name="i"}
        {$i}
    {/for}
    //倒叙
    {for start="10" end="0" comparison="gt" step="-1" name="i"}
        {$i}
    {/for}
标签 含义
eq或者 equal 等于
neq 或者notequal 不等于
gt 大于
egt 大于等于
lt 小于
elt 小于等于
heq 恒等于
nheq 不恒等于
4.比较标签
    {eq name="a" value="10"}正确{/eq}
    {neq name="a" value="10"}正确{/eq}
    {gt name="a" value="10"}正确{/eq}
    {egt name="a" value="10"}正确{/eq}
    {lt name="a" value="10"}正确{/eq}
    {elt name="a" value="10"}正确{/eq}
    {heq name="a" value="10"}正确{/eq}
    {nheq name="a" value="10"}正确{/eq}
5.条件判断
    {switch name="week"}
        {case value="1"} 周一{/case}
        {case value="2"} 周二{/case
        {case value="3"} 周三{/case}
        {case value="4"} 周四{/case}
        {case value="5"} 周五{/case}
        {case value="6"} 周六{/case}
        {default /} 周日
    {/switch}
6.in和notin比较类似
    {in name="week" value="0,1,2,3,4,5,6"}
        合法的数据
    {else /}
        不合法的数据
    {/in}
7.between和notbetween
    {between name="week" value="0,6"}
        合法数据
    {else /}
        不合法的数据
    {/between}
8.原生php
    {php}
        echo "123";
    {/php}
    <?php
        echo "123";
    ?>
9.嵌套使用
    //隔行变色
    {volist name="data" id="val"}
        {if condition="$key % 2"}
            <p style="color: red;">{$key}{$val.id}{$val.name}</p >
        {else /}
            <p style="color: pink;">{$key}{$val.id}{$val.name}</p >
        {/if}
    {/volist}
    //三行变色
    {volist name="data" id="val"}
        {php}
            $sw=$key%3;
        {/php}
        {switch name="sw"}
            {case value="0"}
                <p style="color: red;">{$key}{$val.id}{$val.name}</p >
            {/case}
            {case value="1"}
                <p style="color: blue;">{$key}{$val.id}{$val.name}</p >
            {/case}
            {case value="2"}
                <p style="color: green;">{$key}{$val.id}{$val.name}</p >
            {/case}
        {/switch}
    {/volist}
    //多维数组遍历
    {volist name="type" id="val"}
        <h2>{$val.name}</h2>
        {volist name="val.product" id="goods"}
            <p>{$goods.name}{$goods.price}</p >
        {/volist}
    {/volist}
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。