欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

ThinkPHP(8):模板布局和模板继承 有大用

模板布局

全局配置

比较适用于全站使用相同布局的情况(比如顶部和底部保持不变)

1、需要在config目录下的template.php 文件中添加以下配置

//开启全局模板布局
'layout_on'     =>  true,
//全局模板布局文件名
'layout_name'   =>  'layout',
  • 1

  • 2

  • 3

  • 4

2、渲染模板

Demo8.php

<?php

namespace app\index\controller;

use think\Controller;


class Demo8 extends Controller
{
    public function test1()
    {
        return $this->view->fetch('test1');
    }
}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

模板test1.html

<h2 style="color: blue">我是网站的内容区</h2>
  • 1

全局模板 layout.html

{include file="header"}

{__CONTENT__}

{include file="footer"}
  • 1

  • 2

  • 3

  • 4

  • 5

header.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2 style="color: red;">我是网站的顶部</h2>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

footer.html

<h2 style="color: green;">我是网站的底部</h2>
</body>
</html>
  • 1

  • 2

  • 3

在这里插入图片描述

注:

  • 在不开启layout_on布局模板之前,会直接渲染 application/index/view/Demo8/test1.html 模板文件,开启之后,首先会渲染application/index/view/layout.html 模板,读取layout模板之后会再解析Demo8/test1.html 模板文件

  • 布局模板的写法和其他模板的写法类似,本身也可以支持所有的模板标签以及包含文件,区别在于有一个特定的输出替换变量 {__CONTENT__}

  • layout.html、header.html、footer.html 都是之间放在application/index/view目录下

模板标签(略)

动态方法布局(略)

模板布局文档

模板继承

准备:

  • 如果开启了全局模板布局,先将其关闭

  • 在view下创建public目录,来存放一些基本模板:base.html(必须的)、header.html(网站顶部)、footer.html(网站底部)。后两个可以没有,但是网站一般都有这两个部分(可以以其他名字命名)

Demo8.php

<?php

namespace app\index\controller;

use think\Controller;


class Demo8 extends Controller
{
    public function test2()
    {
        return $this->view->fetch('test2');
    }
}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

header.html 和 footer.html与上面相同

base.html

{include file="public/header" /} 
{block name="nov"} 导航 {/block}
{block name="main"} 主题部分 {/block} 

{include file="public/footer" /}
  • 1

  • 2

  • 3

  • 4

  • 5

test2.html

<! -- 继承基础模板 -->

{extend name="public/base"}

<!--声明区块-->
{block name="main"}
<h2>我是继承案例的内容</h2>

{/block}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

在这里插入图片描述

注:

  • 每个区块由{block} {/block}标签组成,block标签含有一个name属性,用来区别不同的区块

  • 子模板中(test2.html)需要继承继承模板(base.html),使用extend标签,name属性指定模板的位置,这里根路径为view目录

  • 区块的作用可以说就是来占位置的,如果基础模板中的区块没有被声明,则会显示区块中的文字。如果目前不需要只需要占位,可以只声明区块,不添加内容,例如

{block name="nov"}{/block}
  • 1

  • 如果在子模板中想继承父模板中区块的内容可以使用 {

    block} 标签

  • 继承与类的继承很相似。可以理解为父模板中存在某个区块,子模板中不存在该区块,那就显示父模板中的区块;父模板和子模板中都存在相同区块,那就子模板区块代替父模板区块,显示子模板区块

  • 在区块外的标签内容不会被显示


来自  https://blog.csdn.net/weixin_41897680/article/details/108909329


          
普通分类: