`

extends(模版继承)

 
阅读更多

转自:http://gentwolf.sinaapp.com/index/detail/108.html 

 

{extends}模板继承

继承将OOP的理念带到了模板中,允许你定义一个或多个可以被子模板扩展的基模板,扩展意味着查以覆盖父模板中命名相同的区域块。
1.继承可以是多级的,只要你想要,你可以从一个文件继承另一个文件,这个文件可以是从另另一个文件继承的
2.子模板不能在{block}标签外定义内容,{block}这外的内容将会被忽略
3.子模板与父模中的{block}标签内容可以使用append或prepend、{$smarty.block.parent}或{$smarty.block.child}合并
4.子模板使用定义的{extends}继承父模板,{extends}必需是子模板的第一行

注意:
    当$compile_check开启时,继承中的所有文件在每一次调用时都会检测修改时间,因此在服务器生产环境下你应该关闭$compile_check。
    如果你的子模板使用{include}包含,并且它有{block}块,仅当使用{block}包围{include}时它才会起作用。

例:模板继承
layout.tpl (父模板)
<html>
<head>
  <title>{block name=title}Default Page 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}My Page 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}My HTML Page Body goes here{/block}

输出模板:
$smarty->display('mypage.tpl');

输出内容:
<html>
<head>
  <title>My Page Title</title>
  <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
  <script src="/js/mypage.js"></script>
</head>
<body>
My HTML Page Body goes here
</body>
</html>


例:使用模板资源的模板继承
Instead of using {extends} tags in the template files you can define the inheritance tree in your PHP script by using the extends: resource type.
在模板中不使用{extends}标签,你也可以在PHP脚本定义继承等级:资源类型,
The code below will return same result as the example above.
下面的代码返回结果与上面的相同:

<?php
$smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl');
?>

分享到:
评论

相关推荐

    freemarker模版继承

    扩充freemarker实现模版继承指令&lt;@extends&gt;,可以实现类似java的继承,模版现在也可以继承了,也可以实现接口.freemarker interface,freemarker extends

    laravel5.1框架基础之Blade模板继承简单使用方法分析

    本文实例讲述了laravel5.1框架基础之Blade模板继承简单使用方法。分享给大家供大家参考,具体如下: 模板继承什么用? 自然是增强基础页面的复用,有利于页面文档的条理,也便于更改多处使用的内容,如页头、页脚 1....

    详解Python的Django框架中的模版继承

    但是用 Django 解决此类问题的首选方法是使用更加优雅的策略—— 模板继承 。 本质上来说,模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载。 让我们通过

    armadillo:使用 ERB 模板继承模板

    犰狳 一个适用于 ERB 小型库。 用法 要渲染 Armadillo 模板,您需要调用Armadillo.render方法。 此方法接受以下任何选项: :scope - 要绑定到模板范围的任何... extends ( "base.html" ) %&gt; &lt;&#37; vlock ( :title

    Go语言模板引擎gotpl.zip

    }模板继承(extends,block)base.tpl :&lt;html&gt;@block aa {aaaa@block bb {bbb}@block cc {ccc} }@section Pagination(curPage int) &lt;/html&gt;test_extends_base.tpl :@block bb { extends ...

    对于JS继承详细介绍( 原型链,构造函数,组合,原型式,寄生式,寄生组合,Class extends)

    说实在话,以前我只需要知道“寄生组合继承”是最好的,有个祖传代码模版用就行。最近因为一些事情,几个星期以来一直心心念念想整理出来。本文以《JavaScript高级程序设计》上的内容为骨架,补充了ES6 Class的相关...

    ThinkPHP 模板引擎使用详解

    ThinkPHP 内置的模板引擎来定义模板文件,以及使用加载文件、模板布局和模板继承等高级功能。 每个模板文件在执行过程中都会生成一个编译后的缓存文件,其实就是一个可以运行的 PHP 文件。 引用自 ...

    JavaScript模板引擎Nunjucks.zip

    Nunjucks 是一个更复杂的 JavaScript 模板引擎,提供丰富的语言特性和块继承、自动转移、宏和异步控制等等。示例代码:{% extends "base.html" %} {% block header %} &lt;h1&gt;{{ title }} {% endblock %...

    django admin 自定义替换change页面模板的方法

    所以,可以将admin/change_form.html 拷贝到指定目录,然后重新指定继承模板。 {% extends 'admin/englishwordlibrary/recitequestion/change_form.html' %} 然后我在admin/englishwordlibrary/recitequestion/...

    Java 2实用教程(第三版)实验指导与习题解答

    实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 4 实验2 一个简单的Java Applet程序 4 实验3 联合编译 5 上机实践2 基本数据类型与控制...

    非阻塞式服务器Web.Java.zip

    用{%extends xx%}关键字实现继承。 高性能:Web.Java会自动把Html文件,编译成Java文件。应用到生产环境的时候,速度等同于Java的硬输出。且在DEBUG模式下,会动态的加载模板文件,而不需要重启进程。 ...

    golf:高尔夫网络框架

    具有extends和include帮助器的简单模板继承无效。 layout.html &lt; h1&gt; Hello World {{ template "body" }} {{ include "sidebar.html" }} index.html {{ extends "layout.html" }} {{ define "body"}}

    tundra:适用于NodeJ的综合模板引擎

    继承功能。 可重用的代码块。 还有更多... 代码段 {{ print_variable }} {! print_variable_without_escaping_it !} {# comment #} {% var code_inside_this_tags = true %} ~{{ escape_template_tags }} @...

    vue-inheritance-loader:Webpack加载器将与vue-loader一起用于提供模板扩展的单个文件组件

    但是在某些情况下,需要紧密耦合的组件,我们希望它们成为单个实体,但我们想重用模板和控制器逻辑, extends和slot不足,并且可能导致繁琐的代码。 谨慎使用此加载程序,在依赖此加载程序之前探索Vuer的方法来实现...

    The-code-of-iOS-for-ANE:ANE的代码

    Extends 继承 ANE中的具体实现iOS原生功能的代码是我编写的,但是整个ANE的快速编译框架是参考Github上的开源ANE模板,里面有很多宏文件以及批处理文件都已经提前写好了,不用我们再纠结这些问题,直接编译就可以...

    FlaskLearning

    变数采用jinja2的架构,需要用url_for('static', filename = 'css/style.css')引用bootstrap5将后端资料在前端显示继承模板{% extends 'index.html' %}创建子模板{% block content %} {% endblock %}繼承的模板可以...

    django-view-breadcrumbs:面包屑mixins用于Django通用视图

    在base.html模板中,只需添加render_breadcrumbs标记,任何继承了base的模板都应包含面包屑。 IE base.html {% load view_breadcrumbs %} {% block breadcrumbs %} {% render_breadcrumbs %} {# Optionally ...

    es6整理的一些核心语法.docx

    Class 里面同样含有 extends 继承。 14. 模块化 ES6 中引入了模块化的概念,可以使用 export 和 import 来进行模块的导入和暴露。暴露的方法有多种,可以使用 import {需要导入的东西} from’需要导入的东西的位置...

    PHP接口类(interface)的定义、特点和应用示例

    上下级接口可以通过“extends”关键词继承; 接口所有方法都是“public”权限(爱E族); 接口可以定义常量成员,但不能定义变量成员; 类通过“implements”关键词来实现接口,类必须完全实现接口定义的所有...

Global site tag (gtag.js) - Google Analytics