What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
继承是从面向对象编程而来的概念,模板继承可以让你定义一个或多个父模板,提供给子模板来进行扩展。 扩展继承意味着子模板可以覆盖部分或全部父模板的块区域。
继承结构可以是多层次的,所以你可以继承于一个文件,而这个文件又是继承于其他文件,等等。
在子模板和父模板中的{block}
内容,可以通过
append
和 prepend
来进行合并。
{block}
的选项,和
{$smarty.block.parent}
或 {$smarty.block.child}
会持有这些内容。
模板继承在编译时将编译成单独的一个编译文件。对比效果相似的{include}
包含模板功能,模板继承的性能更高。
子模板继承使用{extends}
标签,
该标签一定放要在子模板的第一行。
另一种做法是将整个模板继承树,在PHP程序调用fetch()
或 display()
的时候,
用extends:
的模板资源类型,该做法有更大的灵活性。
当开启了$compile_check
,继承树里面的全部文件都会在每次调用的时候检查是否有修改。
因此,在生产环境中你最好关闭$compile_check
。
如果你的子模板里面有用到{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>
参见
{block}
,
{extends}
和 extends:
资源