ThinkPHP内置了模板布局功能,通过模板布局功能可以很方便实现对页面某些元素的重用。其实如果不使用页面布局也可以使用文件包含的方式来实现,例如在模板中可以使用如下代码:
{include file="public/header" /} // 包含头部模版header
{include file="public/menu" /} // 包含菜单模版menu
{include file="blue/public/menu" /} // 包含blue主题下面的menu模版
但是如果页面非常多,那就需要在每个模板中使用include标签,如果页面非常多还是比较繁琐的,如果使用布局的话就比较方便了,下面说一下布局的用法。
默认情况下布局是没有开启的,可以在配置文件中开启layout_on这个参数,同时也可以指定布局文件的名称,例如在配置文件中增加如下配置:
return [
//.....其他配置
'layout_on' => true,
'layout_name' => 'layout',
]
开启之后,首先会渲染视图目录下的layout.html 模板,布局模板的写法和其他模板的写法类似,本身也可以支持所有的模板标签以及包含文件,区别在于有一个特定的输出替换变量{__CONTENT__},例如,下面是一个典型的layout.html模板的写法:
{include file="public/header" /}
{__CONTENT__}
{include file="public/footer" /}
这样渲染每个模板时都会先渲染layout.html这个布局文件非常方便。但是有可能会有一些特殊情况有些特别的页面不使用统一的布局,这样也比较方便,只需要在控制器中动态关闭布局即可,代码如下:
$this->view->engine->layout(false);
此时不会使用全局的布局文件但是在模板中仍然可以调用自定义布局文件,例如可以再模板中使用如下标签:
{layout name="newlayout" /}