🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> ## 模板布局 > 开启模板布局之后,渲染模板之前会先渲染布局模板layout ### 第一种方式:全局配置方式(适合全站采用同一布局) ``` // 1.首先应该在配置文件这样配置 'template' => [ 'layout_on' => true, // 开启模板布局 ,默认是false 'layout_name' => 'layout/layoutname', // 布局入口文件,默认是layout,布局文件在模块的view目录下 'layout_item' => '{__REPLACE__}', // 内容输出替换变量:默认是__CONTENT__ ] // 2.一个简单的layout.html实例(__CONTENT__是特定的模板输出替换变量,视图文件会替换到这个变量的位置) {include file="public/header" /} {__CONTENT__} {include file="public/footer" /} // 3.如果某些页面不需要使用布局模板功能,可以在模板文件开头加上 {__NOLAYOUT__} 字符串。 ``` ### 第二种方式:模板标签方式(不需要在配置文件进行修改和开启layout_on,layout_on必须为默认的关闭状态) ``` // 只需要在视图文件的开头加入下面标签,replace用来指定布局文件中用来代表该视图文件位置的变量 {layout name="Layout/newlayout" replace="[__REPLACE__]" /} // 没有写layout标签即代表不使用模板布局 ``` ### 第三种方式:使用layout控制模板布局(也不需要在配置文件修改和开启layout_on) ``` class User extends Controller { public function add() { // 开启模板布局,并且采用默认的layout布局文件 $this->view->engine->layout(true); // 动态指定布局文件的名称 $this->view->engine->layout('Layout/newlayout'); // 临时关闭布局模板 $this->view->engine->layout(false); return $this->fetch('add'); } } ``` > ## 模板继承{extend name="base" /} > ### 1.基础模板有很多block区块标签,然后继承于这个模板的子模板根据基础模板的name属性分别替换这些区块 > ### 2. block标签内部可以有任意标签和变量,甚至可以在区块引入其他文件,如下 > `{block name="include"}{include file="Public:header" /}{/block}` ``` // 一个基础模板实例:base.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>{block name="title"}标题{/block}</title> </head> <body> {block name="menu"}菜单{/block} {block name="left"}左边分栏{/block} {block name="main"}主内容{/block} {block name="right"}右边分栏{/block} {block name="footer"}底部{/block} </body> </html> // 子模板中继承示例 {extend name="base" /} {block name="title"}{$title}{/block} {block name="menu"} <a href="/" >首页</a> <a href="/info/" >资讯</a> <a href="/bbs/" >论坛</a> {/block} {block name="left"}{/block} {block name="main"} {volist name="list" id="vo"} <a href="/new/{$vo.id}">{$vo.title}</a><br/> {$vo.content} {/volist} {/block} {block name="right"} 最新资讯: {volist name="news" id="new"} <a href="/new/{$new.id}">{$new.title}</a><br/> {/volist} {/block} {block name="footer"} {__block__} @ThinkPHP 版权所有 {/block} ``` ### 模板继承规则: ### 1.在子模板中使用extend标签来继承base模板,当前子模板中,只能定义基础模板中已经定义的区块而不能定义其他的模板内容,否则将会直接忽略。 ### 2.在子模板中可以对基础模板的区块进行重载,如果没有重新定义,代表沿用基础模板的定义,可以多级继承,但是子模板中的区块必须都在基础模板中进行定义 ### 3.如果子模板定义了一个空的区块,代表删除基础模板中对应name的区块 ### 4.将基础模板内容与子模板定义内容合并 ``` // 如下子模板中的{__block__}会自动替换为基础模板中footer区块定义的内容 {block name="footer"} {__block__}@ThinkPHP 版权所有 {/block} ``` ### 5.extend标签也可以像include一样加载其他模板 ``` // 继承view/public/base.html {extend name="Public:base" /} // 完整路径引入 {extend name="./Template/Public/base.html" /} ```