模板布局
全局配置
比较适用于全站使用相同布局的情况(比如顶部和底部保持不变)
1、需要在config目录下的template.php
文件中添加以下配置
//开启全局模板布局
'layout_on' => true,
//全局模板布局文件名
'layout_name' => 'layout',
2、渲染模板
Demo8.php
<?php
namespace app\index\controller;
use think\Controller;
class Demo8 extends Controller
{
public function test1()
{
return $this->view->fetch('test1');
}
}
模板test1.html
<h2 style="color: blue">我是网站的内容区</h2>
全局模板 layout.html
{ include file="header"}
{ __CONTENT__}
{ include file="footer"}
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>
footer.html
<h2 style="color: green;">我是网站的底部</h2>
</body>
</html>
注:
- 在不开启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');
}
}
header.html 和 footer.html与上面相同
base.html
{ include file="public/header" /}
{ block name="nov"} 导航 { /block}
{ block name="main"} 主题部分 { /block}
{ include file="public/footer" /}
test2.html
<! -- 继承基础模板 -->
{ extend name="public/base"}
<!--声明区块-->
{ block name="main"}
<h2>我是继承案例的内容</h2>
{ /block}
注:
- 每个区块由{block} {/block}标签组成,block标签含有一个name属性,用来区别不同的区块
- 子模板中(test2.html)需要继承继承模板(base.html),使用extend标签,name属性指定模板的位置,这里根路径为view目录
- 区块的作用可以说就是来占位置的,如果基础模板中的区块没有被声明,则会显示区块中的文字。如果目前不需要只需要占位,可以只声明区块,不添加内容,例如
{ block name="nov"}{ /block}
- 如果在子模板中想继承父模板中区块的内容可以使用 { block} 标签
- 继承与类的继承很相似。可以理解为父模板中存在某个区块,子模板中不存在该区块,那就显示父模板中的区块;父模板和子模板中都存在相同区块,那就子模板区块代替父模板区块,显示子模板区块
- 在区块外的标签内容不会被显示