请帮助我了解在树枝中使用模板继承的正确方法。
我有一个模板 base.html.twig ,我的所有其他模板都会扩展。这包含html,head,body等标签和几个块。
我想移动<头> base.html.twig 模板中的部分到其自己的文件 head.html.twig 。如果我使用include指令,则该部分中的标题块不再被扩展模板正确覆盖。
我决定通过在扩展模板中将标题设置为变量并将其传递给include语句来解决此问题。但是现在我的页面需要额外的javascript加载到<头>部分,所以我必须添加变量来指示加载哪些...
显然这是一个可怕的kludge。这样做的正确方法是什么?
编辑:在@goto的建议下,我尝试用embed替换include。现在我的代码看起来像:{# base.html.twig #}
<!DOCTYPE html>
<html>
{% embed 'AppBundle::head.html.twig' %}
{% block title %}My Company Name{% endblock %}
{% endembed %}
<body>
{% block content %}{% endblock %}
</body>
</html>
{# head.html.twig #}
<head>
<title>{% block title %}{% endblock %}</title>
<!-- load other css, js, etc -->
</head>
{# page.html.twig #}
{% extends 'AppBundle::base.html.twig' %}
{% block title %}{{ page.title }} - My Company Name{% endblock %}
{% block content %}
<h1>{{ page.title }}</h1>
{{ page.content|raw }}
{% endblock %}
但这不起作用,标题总是“我的公司名称”。
答案 0 :(得分:0)
好的,例如你有一个 base.html.twig
<html>
<head>
<title>{% block title %}{% endblock %}</title>
<link rel="shortcut icon" href="{{ Someurl }}">
{% block css %}
..... ///some css here
{% endblock %}
{% block js %}
...//javascript goes here
{% endblock %}
.......
使用twig继承,你可以像这样在你的孩子中删除任何这些块:
child.html.twig
{% extends ::base.html.twig %}
{% block js %}
{{ parent() }}
.... your new js
{% endblock %}
使用关键字 {{parent()}} ,您可以将基本模板中的现有数据包含到当前模板中,如果没有它,您将获得明确的阻止。
答案 1 :(得分:0)
尝试使用embed而不是include,它允许您重新定义包含部分的内部块:
{% embed "YourBundle:Acme:_embedded.html.twig" %}
{% block header%}
A new header
{% endblock header%}
{% block body%}
A new body
{% endblock body%}
{% endembed %}
有关详细信息,请参阅the doc
答案 2 :(得分:0)
找到解决方案。我需要&#34;使用&#34;标记:
{# base.html.twig #}
<!DOCTYPE html>
<html>
{% use 'AppBundle::head.html.twig' %}
{% block head %}
{{ parent() }}
{% endblock %}
<body>
{% block content %}{% endblock %}
</body>
</html>
{# head.html.twig #}
{% block head %}
<head>
<title>{% block title %}My Company Name{% endblock %}</title>
<!-- load other css, js, etc -->
</head>
{% endblock %}
{# page.html.twig #}
{% extends 'AppBundle::base.html.twig' %}
{% block title %}{{ page.title }} - My Company Name{% endblock %}
{% block content %}
<h1>{{ page.title }}</h1>
{{ page.content|raw }}
{% endblock %}