目录列表

No Information!

how to use twig extends tag

基本使用

这个标签用来表示本模板继承自另外一个模板。和php一样,twig不支持多重继承,所以你只能有一个extends标签,而且要在模板的最上方。 我们先来定义一个“基模板” base.html 他就像一个骨架一个。

<!DOCTYPE html>  
<html>  
    <head>  
        {% block head %}  
            <link rel="stylesheet" href="style.css" />  
            <title>{% block title %}{% endblock %} - My Webpage</title>  
        {% endblock %}  
    </head>  
    <body>  
        <div id="content">{% block content %}{% endblock %}</div>  
        <div id="footer">  
            {% block footer %}  
                © Copyright 2011 by <a href="http://domain.invalid/">you</a>.  
            {% endblock %}  
        </div>  
    </body>  
</html>  

{% block %} 标签定义了4个区块(block head, block title, block content, block footer),可以让子模板来填充内容。block的作用就是告诉模板引擎,这里面的内容可以被子模板覆盖。 一个子模板大概类似于这样的

{% extends "base.html" %}  

{% block title %}Index{% endblock %}  
{% block head %}  
    {{ parent() }}  
    <style type="text/css">  
        .important { color: #336699; }  
    </style>  
{% endblock %}  
{% block content %}  
    <h1>Index</h1>  
    <p class="important">  
        Welcome on my awesome homepage.  
    </p>  
{% endblock %}  

extends是非常关键的,它告诉模板引擎,本模板继承自另一个模板(base.html)。当模板引擎解析到本模板时,会首先载入父模板。extends标签应该是模板内的第一个标签。 如果子模板没有定义block footer ,那么父模板会用默认值代替。 注意:block标签的名字是不能重复的。如果你想让同一个block多次打印。可以使用block函数

<title>{% block title %}{% endblock %}</title>  
<h1>{{ block('title') }}</h1>  
{% block body %}{% endblock %}  

动态继承

你可以用一个变量来继承不同的模板。

{% extends some_var %}  

如果变量是一个twig模板对象,也可以。

$layout = $twig->loadTemplate('some_layout_template.twig');  

$twig->display('template.twig', array('layout' => $layout));  

1.2版本更新 你可以传递一个数组,twig会选择第一个存在的模板,来继承。

{% extends ['layout.html', 'base_layout.html'] %}  

条件继承

这个很简单自己看吧,

{% extends standalone ? "minimum.html" : "base.html" %}  
文档结构