我正在使用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失败,因为我读到不允许多次扩展。所以任何解决方案请。
答案 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解决方案是最好的,但两种解决方案都有效。