thinkphp的公共模板和布局模板功能,可以方便的规划和重用代码.
公共模板:引入公共模板的标签<include file='模板表达式或模板文件1,模板文件2'>
例如<include file="Public/header"/>//包含头部模板header
<include file="Public/menu"/>包含菜单模板menu
<include file="Blue/Public/menu"/>//包含blue主题下面的menu模板
使用模板文件
<include file="./Application/Home/View/default/Public/header.html"/>
传入参数
<include file="Public/header" title="ThinkPHP框架" keywords="开源WEB开发框架">这样就可以在header.html文件里使用这两个变量;
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>[title]</title>
<meta name="keywords" content="[keywords]" />
</head>
模板布局
有三种布局模板的支持方式:
1.全局配置方式
这种方式适合全站布局相同,需要开启LAYOUT_ON参数,并且设置布局入口文件名LAYOUT_NAME.
'LAYOUT_ON'=>true,
'LAYOUT_NAME'=>'layout',
开启了LAYOUT_ON后我们的模板渲染流程就有所变化,例如:
<?php
namespace Home\Controller;
use Think\Controller;
Class UserController extends Controller {
Public function add() {
$this->display('add');
}
}
正常情况下,会直接渲染Home/View/User/add.html模板.但是开启之后会首先渲染模板布局文件即Home/View/layout.html.布局模板和其他模板类似,支持所有的标签和包含文件,主要有一个特定的输出替换变量{_CONTENT_},例如:<include file="Public:header" />
{__CONTENT__}
<include file="Public:footer" />
渲染完布局模板文件之后,才会渲染模板文件.并把解析后的内容替换到布局模板文件的{_CONTENT_}布局文件。在这种情况下,如果布局模板和模板文件发生修改,都会重新编译。如果想换个布局文件,可以给
'LAYOUT_NAME' =>'Layout/layoutname';
就表示采用Home/View/Layout/layoutname.html作为布局模板
如果页面不想使用布局模板的功能,就要在模板文件的开头加上{_NOLAYOUT_},注意是模板文件。加上之后就不会进行布局模板解析.
2.模板标签方式
这种方式不需要修改配置文件的任何参数
只需要修改模板文件开头<layout name="layout" />
表示当前模板文件需要使用Home/View/layout.html布局文件;
然后解析内容到布局模板文件的{_content_}模板上;
如果不需要使用布局就不写layout标签
如果改变布局模板就修改name属性;
还可以在layout标签里指定要替换的字符串:
<layout name="Layout/newlayout" replace="{_REPLACE_}">
布局模板里
<include file="Public:header" />
<div id="main" class="main" >
{__CONTENT__}
</div>
<include file="Public:footer" />
在引入的header和footer模板文件中也可以添加layout标签,例如header模板文件的开头添加如下标签:
<layout name="munu"/>//这句主要是想说布局模板的嵌套.因为header.html是使用了munu的布局模板,然后又导入了newlayout布局模板里.
第三种方式: 使用layout控制模板布局
使用于局部需要布局或者关闭布局的情况,这种方式也不需要在配置文件里开启LAYOUT_ON.例
<?php
namespace Home\Controller;
use Think\Controller;
Class UserController extends Controller {
Public function add() {
layout(true);
$this->display('add');
}
}
表示当前模板输出启用了布局模板,并采用了默认的布局模板.
或者改为layout("Layout/newlayout");指定使用的布局模板;或者layout('false');关闭布局