我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP中Smarty模板如何实现模板继承

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP中Smarty模板如何实现模板继承

这篇文章主要介绍PHP中Smarty模板如何实现模板继承,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

{extends}
模板继承中,你可以在子模板内使用{extends}标签来扩展父模板。
1.{extends}必须放在模板的第一行。
2.如果子模板要用{extends}来扩展父模板,那么它只能有 {block}的区域。

3.任何其他的模板内容都会被忽略。

扩展使用在$template_dir 之外的文件,请使用模板资源的语法。

Note
当你扩展一个父模板名称的变量如{extends file=$parent_file},

请确保$parent_file变量放到同一个 $cache_id中. 否则Smarty无法辨别不同的$parent_file变量。

parent.php页面

<?php 
//创建smarty对象
require_once './libs/Smarty.class.php';
//定义根目录
define('ROOT', str_replace("\\", "/",dirname(__FILE__))."/");
//实例化Smarty类
$smarty=new Smarty();
//设定定界符
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
//设置为false 定界符号左右可以有空格
$smarty->auto_literal = false;

//添加一个插件的目录
//$smarty->setPluginsDir(ROOT."/libs/myplugins/");

//注意添加一个插件,要把系统默认设置的路径加入 否则不能使用默认系统的插件
$smarty->setPluginsDir(array(
    ROOT."/libs/plugins/",//系统默认设置的路径
    ROOT."/libs/myplugins/",//自定义的
));

//变量输出
$smarty->display('parent.tpl');

?>

child.php页面

<?php 
//创建smarty对象
require_once './libs/Smarty.class.php';
//定义根目录
define('ROOT', str_replace("\\", "/",dirname(__FILE__))."/");
//实例化Smarty类
$smarty=new Smarty();
//设定定界符
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
//设置为false 定界符号左右可以有空格
$smarty->auto_literal = false;

//变量输出
$smarty->display('child.tpl');

?>

parent.tpl页面

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <title><{block name="one"}>This is a title<{/block}></title>
</head>
<body>
<{block name="two"}>This is a content....<{/block}>
<{block name="three"}>我是<{/block}>
<{block name="four"}>中国<{/block}>
<{block name="five"}>电影<{/block}>
<{block name="six"}>我要去<{$smarty.block.child}>上大学<{/block}>
</body>
</html>

child.tpl页面

<{extends 'parent.tpl'}>
<{block name="one"}>我是第一个block<{/block}>
<{block name="two"}>我是第二个block<{/block}>
<{block name="three" append}>津沙港湾<{/block}>
<{block name="four" prepend}>我爱你,<{/block}>
<{block name="five" }>你喜欢看<{$smarty.block.parent}>吗?<{/block}>
<{block name="six" }>上海<{/block}>

浏览器输出(child.php页面输出)

我是第二个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} 来作为继承。

以上是“PHP中Smarty模板如何实现模板继承”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP中Smarty模板如何实现模板继承

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Laravel框架模板继承操作如何实现

本文小编为大家详细介绍“Laravel框架模板继承操作如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel框架模板继承操作如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。laravel和T
2023-07-04

PHP中的Smarty模板引擎是如何工作的?(请解释Smarty模板引擎在PHP中的应用和原理。)

Smarty是一个PHP模板引擎,将模板文件和业务逻辑分离。原理:它解析模板文件,将模板编译为PHP代码,分配值并呈现模板。应用包括页面布局、动态内容、缓存和可重用组件。优势:清晰的分离、可重用性、缓存和安全性。例如,一个Smarty模板可以包含页面布局,而PHP文件可以分配数据并呈现模板,生成最终的HTML输出。
PHP中的Smarty模板引擎是如何工作的?(请解释Smarty模板引擎在PHP中的应用和原理。)
2024-04-02

django中模板继承与ModelForm怎么用

这篇文章主要讲解了“django中模板继承与ModelForm怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“django中模板继承与ModelForm怎么用”吧!模板的继承完美在写ht
2023-06-30

C++ 函数继承详解:如何使用模板继承来实现泛型代码复用?

c++++ 函数继承通过模板继承实现泛型代码复用,允许创建通用函数模板,然后继承更具体的函数,定制不同的数据类型行为。代码示例包括打印容器函数,通过继承定制打印整数和字符串容器。函数继承增强代码复用、可读性、可维护性,以及通过继承类轻松扩展
C++ 函数继承详解:如何使用模板继承来实现泛型代码复用?
2024-05-04

Xamarin XAML语言中如何实现控件模板的模板绑定

这篇文章主要介绍Xamarin XAML语言中如何实现控件模板的模板绑定,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 控件模板的模板绑定为了可以轻松更改控件模板中控件上的属性值,可以在控件模板中实现模板绑定功能。模
2023-06-04

php如何安装模板

本篇内容主要讲解“php如何安装模板”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何安装模板”吧!一、准备工作在安装模板之前,我们需要确保以下条件已满足:1.已安装PHP要安装PHP模板
2023-07-05

PHP中如何使用模板方法模式?

模板方法模式定义了算法的骨架,具体步骤由子类实现,使子类可自定义具体步骤而无需改变整体结构。此模式用于:1. 定义算法的骨架。2. 将算法的具体行为延迟到子类。3. 允许子类自定义算法的某些步骤,而无需更改算法的总体结构。PHP 中的模板方
PHP中如何使用模板方法模式?
2024-05-21

JavaScript如何实现模板文字

小编给大家分享一下JavaScript如何实现模板文字,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!模板文字我们通常使用“+”运算符连接字符串值和变量。有了ES6
2023-06-27

如何为 PHP 网站实现主题和模板

通过以下步骤为 php 网站实现主题和模板:创建主题文件夹,包含 css、js 和模板子目录。创建 style.css 文件,包含网站的视觉样式。根据需要创建 script.js 文件,添加交互性和功能。创建模板文件(如 header.ph
如何为 PHP 网站实现主题和模板
2024-05-02

php网站如何改模板

本文小编为大家详细介绍“php网站如何改模板”,内容详细,步骤清晰,细节处理妥当,希望这篇“php网站如何改模板”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。确定你的网站框架在更改模板之前,你需要知道你的 PHP
2023-07-05

如何使用JavaScript实现模板方法模式

模板方法模式是一种行为设计模式,它是指将一个算法的骨架定义在一个操作中,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。在本文中,我们将介绍如何使用 JavaScript 实现模板方法模式。实现方法在 JavaScript 中,实现模板方法模式需要遵循以下步骤:1. 定义一个基类,该基类将算法的骨架定义在一个操作中。该操作可以是一
2023-05-14

C++ 函数模板中的类模板是如何使用的?

C++ 函数模板中的类模板C++ 函数模板可以感知类模板,并利用它们作为参数类型。这允许您创建通用函数,适用于各种数据类型和结构。语法templatevoid func(const T& arg1, const
C++ 函数模板中的类模板是如何使用的?
2024-04-15

php如何替换模板变量

这篇文章给大家分享的是有关php如何替换模板变量的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php替换模板变量的方法:首先用fopen()函数打开文件;然后通过fread函数读取文件;最后使用str_repla
2023-06-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录