模板引擎使用详解:包含公共模板

ThinkPHP内置了一个基于XML的编译型模板引擎,本篇开始对其内置的标签做深入的讲解,如果你使用的是Smarty等第三方模板引擎,请忽略。
变量的输出我们已经在快速入门的变量输出中做了详细的描述,后面主要讲解变量的输出判断、循环和控制,以及包含公共模板和资源文件等。

包含公共模板

[-more-]

include标签

使用include标签在当前模板中包含公共模板,例如常见的header和footer等公共模板,include标签最常用的属性是file,但是支持不同的用法,其用法基本和我们常用的模板渲染方法display方法差不多。例如:
包含Public目录下面的header模板

<include file="Public:header" />

复制代码

包含当前模板目录下面的menu模板

<include file="menu" />

复制代码

如果当前使用了多模板主题功能,还可以包含其他主题的模板

<include file="blue:User:read" />

复制代码

表示包含blue模板主题下面的User/read模板文件,include标签所支持的模板深度只能到操作层次,也就是说ThinkPHP默认的模板结构采用的是:主题/模块/操作.模板后缀,使用上述用法包含模板的时候,file属性不需要指定模板后缀,如果你的模板结构不是标准结构,可以采用包含完整模板文件的方式:

<include file="./Tpl/default/header.html" />

复制代码

如果你在file属性中指定了模板文件后缀,则就会认为是包含完整模板的规则,如果你采用的是相对路径包含,那么当前的起始目录应该是项目入口文件所在的位置。
也可以用变量的方式:

    <include file="$filename" />

复制代码

但是并不推荐变量调用方式,因为由于模板引擎的编译特性,编译后会被缓存。

参数传递

include标签除了file属性之外,还支持传入一些简单的参数,并直接传递给模板文件使用,举个例子,我们包含一个头部文件,希望在模板文件里面动态指定网页标题和关键字信息,那么可以通过:

<include file="Public:header" title="ThinkPHP框架" keywords="开源WEB开发框架"/>

复制代码

这里我们在包含header公共模板的时候,还传入了title和keywords两个参数,我们来看下header模板文件怎么接收这些参数:

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>[title]</title>
    <meta name="keywords" content="[keywords]" />
    </head>

复制代码

模板文件中的[title]和[keywords]来替换include标签中传入的参数。

包含多个模板

从3.1版本开始,include标签可以支持同时包含多个模板文件,例如:

<include file="Public:header,Public:menu" />

复制代码

也可以支持不同方式的包含混合,例如:

<include file="Public:header,./Tpl/default/menu.html" />

复制代码

嵌套包含模板

include标签支持嵌套使用,例如,我们可以在header公共模板文件中再次包含另外一个公共模板:

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>[title]</title>
    <meta name="keywords" content="[keywords]" />
    </head>
    <include file="Public:menu" />

复制代码

并且理论上不限制嵌套层次,只要避免不发生循环嵌套的情况即可。

总结

include标签可以一定程度上简化重复的模板书写,和便于同步修改,不足就是如果公共模板文件发生更改,但是当前的主模板文件没有更改,则不会自动更新模板缓存,除非你设置了模板缓存有效期,那么在缓存过期后会自动更新模板缓存。

时间: 2024-10-06 01:25:06

模板引擎使用详解:包含公共模板的相关文章

freemaker模板引擎使用详解

目录: 一.freemaker介绍 二.freemaker的使用 正文: 一.freemaker介绍 1.1FreeMarker概述:FreeMarker是一款模板引擎,即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 1.2获得FreeMarker 官网:http://freemarker.org/ 中文帮助文档:https://sourceforge.net/projects/freemarker/files/chinese-manu

flask中jinjia2模板引擎使用详解4

接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下: {% %} {% %}      {% %}      <>{{ }}</>      {% %} {% %} 在code.py中添加url规则 @app.route() renderList():      users = [,,]      render_template(,users = users

flask中jinjia2模板引擎使用详解5

接上文 宏 可以理解为函数,即把一些常用的模板片段做好封装,以便于重用,减少工作量和维护难度. 宏的定义很简单: {%macro xxx()%} ##这里写内容 {%endmacro%} 下面引用官方的一个例子进行说明: {% macro input(name, value='', type='text', size=20) -%} <input type="{{ type }}" name="{{ name }}" value="{{ value|

模板引擎ejs详解

singsingasong.js: const ejs=require('ejs'); ejs.renderFile('./views/singsingasong.ejs', {'name':'singsingasong',json: {arr: [ {user: 'blue', pass: '123456'}, {user: 'zhangsan', pass: '654321'}, {user: 'xiaoming', pass: '999999'}, ]}}, function (err,

《开源框架那些事儿26》:“最好的模板引擎”Beetl剖析及与Tiny模板引擎对比

查找最好的模板引擎,发现这个搜索词出来的是beetl,于是就仔细学习了Beetl,试图找寻“最好的”三个字表现在哪里?于是搭建环境,阅读代码,与鄙人所做的TinyTemplate进行了粗略的对比,在征得beetl作者@闲.大赋 的同意后,编写了此对比文章.由于时间关系,对Beetl的认知深度还有不足,分析不当之处在所难免,还请广大同学纠正,定当有错误和不当必改. 点滴悟透设计思想,加入框架设计兴趣小组:http://bbs.tinygroup.org/group-113-1.html Beetl

cocos2d-x3.0 新的物理引擎之详解setCategoryBitmask()、setContactTestBitmask()、setCollisionBitmask()

转载请注明出处:游戏开发实验室http://blog.csdn.net/u010019717/article/details/32942641 我在编写游戏的时候遇到了这个问题,  物理引擎其他的内容还好理解,  就这三个函数就是没找到有人详细的解释一下.  我不知道这个都没弄明白,游戏是怎么做出来的.那我就不吐糟了,      下面的所有内容都是我的个人推断.不知道正不正确.    反正我目前是这么理解的. 我们先来看看这三个函数的定义: /** * A mask that defines w

伯努利分布详解(包含该分布数字特征的详细推导步骤)

Bernouli Distribution(中文翻译称伯努利分布) 该分布研究的是一种特殊的实验,这种实验只有两个结果要么成功要么失败,且每次实验是独立的并每次实验都有固定的成功概率p. 概率公式可以表示为  , x只能为0或者1,即要么成功要么失败 根据数学期望的性质 由于这里x只有两个取值所以该分布的数学期望为 方差则可以由方差公式来计算 方差公式:  该分布显然, 因此可以得到, 所以方差  最后我们来推导该分布的最大似然估计 是这样定义的,假设我们做了N次实验,得到的结果集合为 ,我们想

flowplayer网页视频播放器事例详解--包含各种参数说明(自译)

flowplayer网页视频播放器事例详解--包含各种参数说明(自译) <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">     <title></title>     <meta http-equiv="content-type" content="text/html; charset=UTF-8&

Myeclipse Templates详解(一) —— Java模板基础

目录 Templates简介 MyEclipse自带Templates详解 新建Template 自定义Template 因为自己比较懒,尤其是对敲重复代码比较厌恶,所以经常喜欢用快捷键和模板,Myeclipse的模板功能其实很强大,好像自己只用过syso这一个,所以最近学习了一下,初次写博客,谢绝转载. 一.Templates简介 1.1 Templates基本介绍 Myeclipse模板的查看编辑入口,Window->Preferences->Java->Editor->Tem