thinkphp 使每个模板页都包含一个header文件和一个footer文件

由于在做的工程中,每个模板页都会包含同一个header和footer部分,如果我们每个文件中都写一遍的话,
那就大大造成了代码冗余,所以要避免重复代码的出现。

介绍几种方法来使得每个模板页都能包含~

全局配置方式

1.我们可以在Home目录的Conf文件中开启LAYOUT_ON 参数(默认不开启),并且设置布局入口文件名LAYOUT_NAME(默认为layout)

'LAYOUT' => true,
'LAYOUT_NAME' => 'layout',

2.在模板目录下建立一个layout.html文件,文件代码如下:

<include file="Public:header" />
{__CONTENT__}
<include file="Public:footer" />

{CONTENT} 为特定字替换符串,如果模板为Index/index.html,thinkphp先读取layout模板之后,会再解析index/index.html模板文件,并把解析后的内容替换到layout布局模板文件的{CONTENT}特定字符串

当然我们也可以自己修改替换部分的名称,但是只能有一个:

'TMPL_LAYOUT_ITEM' =>  '{__REPLACE__}' //通过设置来改变这个特定的替换字符串

也可以指定其他位置的布局模板,设置

'LAYOUT_NAME'=>'Layout/layoutname',

如果某些页面不需要使用这个功能,可以在模板文件开头加上 {__NOLAYOUT__}

模板标签方式

这种布局方式我们不需要设置LAYOUT_ON参数,不然会造成循环。直接在需要引入的模板头部定义标签即可:

<layout name="layout" />

表示的是当前模板文件需要使用layout.html布局模板文件。文件里面的定义方法跟第一种一样。
如果需要其他的布局模板,可以改变layout的name来实现。

<layout name="newlayout" />

使用layout控制模板布局

使用内置的layout方法可以更灵活的在程序中控制模板输出的布局功能,尤其适用于局部需要布局或者关闭布局的情况,这种方式也不需要在配置文件中开启LAYOUT_ON。例如:

<?php
    namespace Home\Controller;
    use Think\Controller;
    class IndexController extends Controller {
       public function index(){
            layout(true);//or layout(false); or layout("Layout/layoutname");
            $this->display();
        }
    }

更多详情请点这里