转自: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');
?>
分享到:
相关推荐
标题 "TP5 模板继承" 指的是 ThinkPHP5(简称 TP5)框架中的一个特性,它允许开发者在创建视图模板时利用继承机制,实现页面布局的复用和定制。模板继承使得开发者可以定义一个基础模板,然后其他模板可以继承这个...
扩充freemarker实现模版继承指令<@extends>,可以实现类似java的继承,模版现在也可以继承了,也可以实现接口.freemarker interface,freemarker extends
`extends` 指令允许一个模板继承另一个模板,继承的模板可以重写父模板的部分内容。这种方式极大地提高了代码的复用性和可维护性。 4. **AbstractDirective.java** `AbstractDirective` 是所有自定义 Freemarker ...
Blade模板不仅允许开发者使用原生PHP代码,还引入了一些特性,如模板继承、内容段(section)和扩展(extends)等,使得视图布局更加灵活且易于维护。 1. Blade模板简介 Blade模板是Laravel提供的一个轻量级模板...
在 Laravel 框架中,Blade 模板引擎提供了强大的功能,包括模板继承,使得开发者可以构建可重用和可维护的视图结构。在 Laravel 5.1 版本中,Blade 模板继承是提升代码复用性和模块化设计的重要工具。 模板继承的...
模板继承通过使用{% extends %}和{% block %}标签来实现。在Jinja2模板中,{% extends %}标签用于指定当前模板将要继承的父模板文件。而{% block %}标签则定义了子模板可以覆盖的区域,父模板中的这些区域默认是空的...
模板继承的核心思想是定义一个基础模板(Base Template),在这个基础上,子模板(Child Templates)可以通过覆盖或扩展基础模板中的特定部分来实现个性化定制。 基础模板通常包含了网站的全局布局,如头部、导航栏...
在Flask框架中,模板继承是一种非常实用的功能,它允许开发者重用模板的公共部分,减少代码冗余,提高开发效率。Jinja2是Flask默认的模板引擎,提供了模板继承这一特性。下面我们将深入探讨Flask框架模板继承的实现...
类是创建对象的模板,而对象则是类的实例。类的继承是OOP中的一个核心概念,它允许我们创建一个新类,这个新类可以从已有的类(称为基类或父类)继承特性,同时可以添加新的功能或修改已有的行为。这样可以提高代码...
Vue.js的核心特性之一是其灵活的组件系统,其中包括了Extends扩展选项用法,这一功能可以让开发者复用和继承组件的属性、方法和生命周期钩子等,从而提高开发效率和保持代码的一致性。 ### Vue.js Extends扩展选项...
继承的关键在于`extends`关键字,如 `class ChinaPeople extends People`所示。通过继承,子类可以重写(override)父类的方法以实现特定的功能,例如 `speakHello()`、`averageHeight()` 和 `averageWeight()` 方法...
在Java中,子类可以通过关键字`extends`来继承父类。 3. **多态**:多态是指同一种操作可以作用于不同类型的对象,提供了一种更灵活的编程方式。 4. **抽象**:抽象是将对象的共同特征抽取出来形成抽象类,使得代码...
通过分析这个文件,我们可以看到实际应用中的类定义和继承实践,包括如何定义类,如何使用构造函数初始化对象,以及如何通过`extends`关键字实现类的继承和覆盖或扩展父类的方法。 总结一下,JavaScript的类、对象...
5. **模板继承**:通过`extends`和`block`,Smarty支持模板继承,子模板可以继承父模板的部分或全部内容,并在其基础上进行修改,提高代码复用。 6. **过滤器和插件**:Smarty有内置的过滤器,可以在显示变量前对其...
在 Laravel 中,`@extends` 指令用于声明一个视图模板继承自另一个模板。比如,`index.blade.php` 使用 `@extends("admin.layouts.main")` 来表示它扩展自 `main.blade.php`。这意味着 `index.blade.php` 将继承 `...
在Java中,继承使用的关键字是`extends`,这表示子类(派生类)继承父类(基类)。继承的好处主要体现在提高了代码的复用性以及维护性。当多个类之间存在逻辑上的is-a关系时,就可以考虑使用继承。例如,所有的车辆...
- **定义**:抽象类是含有一个或多个抽象方法的类,不能被实例化,主要目的是作为其他类的基础模板。 - **特点**: - 不能实例化。 - 可以包含非抽象方法和抽象方法。 - 抽象方法没有方法体,必须由子类实现。 -...