{extends}模板继承

 

模板继承中,你可以在子模板内使用{extends}标签来扩展父模板。 详细参见模板继承.

 

1. {extends}必须放在模板的第一行。

2. 如果子模板要用{extends}来扩展父模板,那么它只能有 {block}的区域,任何其他的模板内容都会被忽略。

 

参数名 类型 必需 说明
file string Yes 需要载入的模板文件

 

模板继承

1 继承是从面向对象编程而来的概念,模板继承可以让你定义一个或多个父模板,提供给子模板来进行扩展。 扩展继承意味着子模板可以覆盖部分或全部父模板的块区域。

2 继承结构可以是多层次的,所以你可以继承于一个文件,而这个文件又是继承于其他文件,等等。

3 在覆盖父模板的{block}块以外的地方, 子模板不能定义任何内容。任何在{block}以外的 内容都会被自动忽略。

4 在子模板和父模板中的{block}内容,可以通过 append 和 prepend来进行合并。

5 模板继承在编译时将编译成单独的一个编译文件。对比效果相似的{include}包含模板功能,模板继承的性能更高。

6 子模板继承使用{extends}标签, 该标签一定放要在子模板的第一行。 另一种做法是将整个模板继承树,在php程序调用fetch() 或 display()的时候, 用extends:的模板资源类型,该做法有更大的灵活性。

 

{extends file='parent.tpl'}

 

模板继承例子:

layout.opx (父模板)

<html>
<head>
    <title>{block name=title}默认页面标题{/block}</title>
    <meta charset="utf-8"/>
    {block name=head}{/block}
</head>
<body>
{block name=body}{/block}
</body>
</html>

myproject.tpl (子模板)

{extends file='layout.tpl'}
{block name=head}
    <link href="/css/myproject.css" rel="stylesheet" type="text/css"/>
{/block}

mypage.tpl (孙模板)

{extends file='myproject.tpl'}
{block name=title}我的页面标题{/block}
{block name=head append}
    <script src="/js/mypage.js"></script>
{/block}
{block name=body}我的HTML页面内容在这里{/block}

最后输出:

<html>
<head>
    <title>我的页面标题</title>
    <meta charset="utf-8"/>
    <link href="/css/myproject.css" rel="stylesheet" type="text/css"/>
    <script src="/js/mypage.js"></script>
</head>
<body>
我的HTML页面内容在这里
</body>
</html>

 

在PHP 代码中确定继承关系:
如果你在代码中确定继承关系,则可以不需要在首行中使用 {extends} 标记。

代码如下:

define('ROOT_DIR', __DIR__);
date_default_timezone_set('PRC');
require(ROOT_DIR . '/vendor/autoload.php');


use sdopx\Sdopx;
$sdopx = new Sdopx();
$sdopx->setTemplateDir('./view');
$sdopx->setCompileDir('./runtime');
$sdopx->display('extends:layout.tpl|myproject.tpl|mypage.tpl');
Copyright © 2021 海南的叶子 All Rights Reserved 琼ICP备2021000725号

琼公网安备 46900702000037号