扩展或包含多个实例TWIG

时间:2016-04-19 16:01:58

标签: php twig

我正在使用Twig作为模板引擎,我有一个共同的右侧边栏,应该包含在所有页面上。

_base.twig

/* Page HTML header */
    {% block content %} {% endblock %}
/* Page HTML Footer */

index.twig

{% extends "_base.twig" %}
    {% block content %}
         <div id="left-bar">Dynamic Content</div>
         <div id="right-bar">Static Content</div>
    {% endblock %}

about.twig

    {% block content %}
         <div id="left-bar">Dynamic Content</div>
         <div id="right-bar">Static Content</div>
    {% endblock %}

....对于很多页面来说......我希望right-bar成为一个外部页面,并且每个页面都应该包含内容,因为内容总是相同的。

我尝试使用{% extends %}两次,但Twig失败,因为我读到不允许多次扩展。所以任何解决方案请。

1 个答案:

答案 0 :(得分:1)

使用Twig,您有很多可能解决问题:

A /家长解决方案官方文档为here

此解决方案呈现子块中父块的内容。

<强> _base.twig

/* Page HTML header */
{% block content %}
    <div id="left-bar">Dynamic Content</div>
    <div id="right-bar">Static Content</div>
{% endblock %}
/* Page HTML Footer */

<强> index.twig

{% extends "_base.twig" %}
{% block content %}
    {{ parent() }}
{% endblock %}

<强> about.twig

{% extends "_base.twig" %}
{% block content %}
    {{ parent() }}
{% endblock %}

<强> other.twig

{% extends "_base.twig" %}
{% block content %}
    <div> If you don't place the parent twig attribute, your menu can't appear and will be overrided</div>
{% endblock %}

B /包含解决方案正式文档为here

此解决方案创建另一个块,并在子块中调用块。

<强> _base.twig

/* Page HTML header */
{% block content %}
{% endblock %}
/* Page HTML Footer */

<强> navBar.twig

<div id="left-bar">Dynamic Content</div>
<div id="right-bar">Static Content</div>

<强> index.twig

{% extends "_base.twig" %}
{% block content %}
    {{ include('navBar.twig') }}\]
{% endblock %}

<强> about.twig

{% extends "_base.twig" %}
{% block content %}
    {{ include('navBar.twig') }}
{% endblock %}

如果你使用Symfony2 Framework,你已经可以使用{{ render(controller('')) }} [你可以看到样本here]来呼叫一个特定的控制器,他自己称之为一个树枝视图......它&#39;如果你想在你的块中加载一个动态值非常有用,但效果不如{{ include('') }} ......

对我来说,B解决方案是最好的,但两种解决方案都有效。