模板的外衣

布局文件

在不指定布局文件时,使用默认布局 templates/default/default.layer.php

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title><?= $title ?? '' ?></title>
    <meta name="Keywords" content="<?= $keywords ?? ''; ?>"/>
    <meta name="Description" content="<?= $description ?? ''; ?>"/>

    <link href="<?= $this->res('libs/bootstrap/3.3.5/css/bootstrap.min.css') ?>" rel="stylesheet">
    <script src="<?= $this->res('libs/jquery/1.11.1/jquery.min.js') ?>"></script>
</head>
<body>
<?= $content ?? '' ?>
<script src="<?= $this->res('libs/bootstrap/3.3.5/js/bootstrap.min.js') ?>"></script>
</body>
</html>

布局文件可以当作是最外层的模板,模板通过组合来复用,使用嵌套来降低数据渲染的复杂度,模板的本质是把PHP代码 include 到视图控制器类中, 在模板中可以访问类中定义的所有方法,拥有很高的性能和扩展能力。

布局文件中的变量

布局文件中默认定义了4个内置变量

$title
$keywords
$description  

控制页面标题,关键词和描述

$content

特殊变量,视图控制器方法输出结果保存到$content变量, 在 include 布局文件时一起导入到布局文件中

SEO相关设置

Web开发SEO是不可忽略的,在视图控制器方法中使用 $this->set() 方法设置页面标题、关键词等

$this->set('title', 'hi');
$this->set('keywords', 'hi - keywords');
$this->set('description', 'hi - description');

$this->renderTpl('hello/index', $data);

自定义布局

web\templates 目录下新建 simple.layer.php 布局文件

<h1><?= $content ?? '' ?></h1>

然后在视图控制器的方法中指定 layer

$this->set('layer', 'simple');
$this->renderTpl('hello/index', $data);

最简单的布局文件仅需要输出 $content 变量

不使用布局文件

在某些时候,比如AJAX请求中返回html片段,仅需要返回模板内容,可以指定不加载布局文件

$this->set('load_layer', false);