继承是从é�¢å�‘对象编程而æ�¥çš„æ¦‚念,模æ�¿ç»§æ‰¿å�¯ä»¥è®©ä½ 定义一个或多个父模æ�¿ï¼Œæ��供给å�模æ�¿æ�¥è¿›è¡Œæ‰©å±•。 扩展继承æ„�味ç�€å�模æ�¿å�¯ä»¥è¦†ç›–部分或全部父模æ�¿çš„å�—区域。
继承结构å�¯ä»¥æ˜¯å¤šå±‚æ¬¡çš„ï¼Œæ‰€ä»¥ä½ å�¯ä»¥ç»§æ‰¿äºŽä¸€ä¸ªæ–‡ä»¶ï¼Œè€Œè¿™ä¸ªæ–‡ä»¶å�ˆæ˜¯ç»§æ‰¿äºŽå…¶ä»–文件,ç‰ç‰ã€‚
在覆盖父模�的
{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>
��
{block},
{extends}
和 extends: 资�
