smarty中的母板极制_extends和block标签
模板继承 继承是从面向对象编程而来的概念,模板继承可以让你定义一个或多个父模板,提供给子模板来进行扩展。 扩展继承意味着子模板可以覆盖部分或全部父模板的块区域。
继承结构可以是多层次的,所以你可以继承于一个文件,而这个文件又是继承于其他文件,等等。
在覆盖父模板的{block}块以外的地方, 子模板不能定义任何内容。任何在{block}以外的 内容都会被自动忽略。
在子模板和父模板中的{block}内容,可以通过 append 和 prepend来进行合并。 {block}的选项,和 {$smarty.block.parent} 或 {$smarty.block.child}会持有这些内容。
模板继承在编译时将编译成单独的一个编译文件。对比效果相似的{include}包含模板功能,模板继承的性能更高。
子模板继承使用{extends}标签, 该标签一定放要在子模板的第一行。 另一种做法是将整个模板继承树,在PHP程序调用fetch() 或 display()的时候, 用extends:的模板资源类型,该做法有更大的灵活性。
Note 当开启了$compile_check,继承树里面的全部文件都会在每次调用的时候检查是否有修改。 因此,在生产环境中你最好关闭$compile_check。
Note 如果你的子模板里面有用到{include} 来包含模板,而被包含的模板里面存在供{include}模板 调用的{block}区域, 那么在最顶层的父模板里面,你需要放置一个空的 {block} 来作为继承。
Example 17.6. 模板继承例子
layout.tpl (父模板)
<html>
<head>
<title>{block name=title}默认页面标题{/block}</title>
{block name=head}{/block}
</head>
<body>
{block name=body}{/block}
</body>
</html>
myproject.tpl (子模板)
{extends file='layout.tpl'}
{block name=head}
<link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
<script src="/js/mypage.js"></script>
{/block}
mypage.tpl (孙子模板)
{extends file='myproject.tpl'}
{block name=title}我的页面标题{/block}
{block name=head}
<link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
<script src="/js/mypage.js"></script>
{/block}
{block name=body}我的HTML页面内容在这里{/block}
显示上面的模板
$smarty->display('mypage.tpl');
页面将输出:
<html>
<head>
<title>我的页面标题</title>
<link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
<script src="/js/mypage.js"></script>
</head>
<body>
我的HTML页面内容在这里
</body>
</html>
Example 17.7. 用extends:来进行模板继承
代替模板内使用{extends}的继承方式, 你可以通过在PHP内定义继承树来进行继承,使用 extends:的资源类型。
下面的代码将返回和上面例子一样的结果:
<?php
$smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl');
?>
smarty中的母板极制_extends和block标签的更多相关文章
- smarty中如何统计数组的个数?
在做web前端中,很多人会遇到在smarty中如何统计数组的个数,其实很简单 比如数组$array 你只需要用{$array|@count}就可以获取.
- smarty中section遍历数组
smarty中section遍历数组
- Smarty中一些标签的使用
Smarty中的标签和php中的标签不一样 foreach标签{foreach from=$goods(变量名) key='键,不带$' item='值,不带$'}中间的显示内容{/foreach ...
- smarty 中时间格式化的用法
大家都知道PHP中输出时间和日期可以用 date("Y-m-d H:i:s",时间戳) , 但是在smarty模板中,$time|date_format:'%Y-%m-%d %H ...
- Smarty中模板eq相等 ne、neq不相等, gt大于, lt小于
eq相等 ne.neq不相等, gt大于, lt小于 gte.ge大于等于 lte.le 小于等于 not非 mod求模 is [not] div by是否能被某数整除 i ...
- smarty中的修饰函数
smarty中的修饰函数: 对在模板文件中显示的数据变量进行二次修饰. 格式: {ts:变量|函数名:参数1:参数2:参数3...|函数名:参数1:参数2...} 常见的修饰函数: capitaliz ...
- Smarty中section的使用
在smarty的使用过程中,有很多时候需要将一个数组输出到模板中来处理,以下将演示如何将一个索引(index)数组和关联(assocaite)数组在页面中展现出来. 本文中假设有如下一个索引数组 1 ...
- Smarty中{literal}的使用详解(ecshop)
如何在文件里加入JS代码,如果按一般平常添加方法,会出错,解决的方法:把script套在{literal}{/literal}之间试试看,例如:{literal} {/literal} ------- ...
- Smarty中的请求变量和保留变量的使用范例
PHP中提供的超全局数组 Smarty中对应的请求变量 $_GET <{$smarty.get}> $_POST ...
随机推荐
- ASP.NET Ajax核心对象
本章学习目标 主要掌握AJAX的基本概念和实现机制,学习并创建XMLHttpRequest对象,使用XMLHttpRequestObject对象获取服务器端的数据 主要内容如下,请点击ASP.NET ...
- Android Bitmap那些事之如何优化内存
前言:”安得广厦千万间,大庇天下寒士俱欢颜“——杜甫.在帝都住的朋友们都可能会遇到租房子困难的问题(土豪请无视),找房子真是力气活,还耗费时间,占用我宝贵的写博客时间,没办法,谁让咱没钱还想住的好点, ...
- FreeBSD修改root密码错误passwd: pam_chau(www.111cn.net)thtok(): error in service module from:http://www.111cn.net/sys/freebsd/66713.htm
在FreeBSD中修改帐号密码有时候会出现一些错误,针对passwd: pam_chauthtok(): error in service module这样的错误提示,简单整理了以下解决方案:错误提示 ...
- Js中把JSON字符串转换为JSON对象(eval()、new Function())
在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用j ...
- webSphere集群部署主要步骤
1.系统管理-节点,添加本机节点和另外一台机器的节点2.建立集群服务cluster,添加成员节点3.将应用部署到集群服务cluster4.将数据库源分别建立到节点作用域5.后续步骤参照安装手册 注意事 ...
- 10款经典的web前端特效的预览及源码
1.CSS3响应式导航菜单 今天我给大家介绍一下如何使用纯CSS来实现的一个响应式导航菜单,我们使用的是HTML5+CSS3技术,当浏览器窗口变小或者使用手机浏览器访问的时候,原本横条菜单会收缩成一个 ...
- for循环,你深刻理解了吗?
前几天,有一个面试机会,去看了看,遇到一个认为不错的面试题! 过了几天看到csdn上说华为的一道面试题,看了下和我遇到的很相似! 我分享出来希望大家有帮助! 你真的深刻理解for循环了吗? ...
- 济南学习 Day 5 T1 pm
欧拉函数(phi)题目描述: 已知(N),求phi(N). 输入说明: 正整数N. 输出说明: 输出phi(N). 样例输入: 8 样例输出: 4 数据范围: 对于20%的数据,N<=10^5 ...
- Codevs 1014 装箱问题
题目描述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数). 要求n个物品中,任取若 ...
- The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.问题解决
didFailLoadWithError(): Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loa ...