smarty中的母板极制_extends和block标签

Posted Wss0130

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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'); 
?>

转自:http://www.cnblogs.com/a-xu/p/4177776.html

以上是关于smarty中的母板极制_extends和block标签的主要内容,如果未能解决你的问题,请参考以下文章

PHP Smarty 模板 模板继承 {extends}

django template模板 母板

python之django母板页面

python之django母板页面

Smarty模板函数

Smarty模板函数