abstract:第一种:全局配置模式适用于全站使用相同布局的情况,需要在config中配置开启layout_on参数,默认是不开启的,还有设置入口文件名,默认是layout;<?phpreturn [ //调试模式 'APP_DEBUG' => true, //模板的布局 '
第一种:全局配置模式
适用于全站使用相同布局的情况,需要在config中配置开启layout_on参数,默认是不开启的,还有设置入口文件名,默认是layout;
<?php
return [
//调试模式
'APP_DEBUG' => true,
//模板的布局
'template' => [
'layout_on' => true,
'layout_name' => 'layout'
]
];
layout_on开启之后,从控制器fetch(‘index’)渲染后,本来不会直接渲染index.html文件,而是会到自定义的layout.html文件中去渲染,在其中会出现一个{_CONTENT_},这个就代表了要渲染的index模板文件,是将index的内容替换了{_CONTENT_}内容;
{include file='header' /}
{__CONTENT__}
{include file='footer' /}
这样,我就可以实现头尾分离,直接在index.html文件中写内容了;
如果某些页面不需要使用布局模板功能,可以在模板文件开头加上 {__NOLAYOUT__} 字符串;
第二种:模板标签方式
这种方式要关闭layout_on,负责会出现布局循环;
直接添加
{layout name="layout" /}
一个模板文件中只能使用一个布局模板,如果模板文件中没有使用任何layout标签则表示当前模板不使用任何布局;
如果需要其他的布局模板,只要改变name值即可,也可以指定要替换的特定字符串:
{layout name="Layout/newlayout" replace="[__REPLACE__]" /}
第三种:使用内置的layout方法控制模板布局
这种方式适用于局部需要布局或者关闭布局的情况,也不需要开启layout_on方法;
public function index(){
$this->view->engine->layout(true);
return $this->fetch();
}
上面这种采用的是默认的布局模板,也就是name名为layout的html,替换的字符也是磨人的{_CONTENT_};
如果要使用自定义的,只要在layout()函数中传值即可;
$this->view->engine->layout('newLayout');
如果已经开启了全局,要关闭页面的布局模板,也可以使用这个方法关闭它:
$this->view->engine->layout(false);
Correcting teacher:天蓬老师Correction time:2019-04-08 10:12:08
Teacher's summary:布局其实是在模板继承的更加层级的抽象, 大多情况下, 模板继承基本上已经满足要求了, 也更灵活