我正在尝试使用一堆自定义设置变量包含一个twig文件,然后使用多个其他模板文件中的变量。类似于包含PHP文件的方式。
我似乎无法访问索引文件中include中设置的变量。
有没有办法做到这一点?
示例代码 * 已编辑
包含的文件:
{# variables.html #}
{% set width = "100" %}
{% set height = "250" %}
模板文件:
{# index.html #}
{% include 'variables.html' %}
{{ width }}
{{ height }}
预期结果:
100 250
实际结果:
// Nothing gets output
答案 0 :(得分:2)
我只是想尝试做同样的事情并想出以下内容:
创建snippets.twig
以维护所有这些迷你变量。在您的情况下,您可以将其称为variables.twig
。在这个文件中,我使用了macro而没有任何参数。我正在创建格式化的输入日期标记,我可以在我的所有模板中使用它,它看起来像这样:
{% macro entry_date() %}
<time datetime="{{post.post_date|date('m-d-Y')}}">{{post.post_date|date('F j, Y')}}</time>
{% endmacro %}
请注意,名称声明后的括号必须
在我的主要布局文件layout.twig
中,我通过import语句引用了此宏,因此可以在所有子模板中访问它:
{% import "snippets.twig" as snippets %}
<!doctype html>
...
在我的模板文件中,我现在可以访问snippets
,并且可以像查询任何其他变量一样查询它:
{{ snippets.entry_date }}
<强>更新强>
这似乎没有正确运行代码。如果您只是存储静态内容,那么您应该很好。你也可以将args传递给宏,所以我想你可以在那里发现一些魔法,但我还没有尝试过。
答案 1 :(得分:1)
据我所知,只有{% extends %}
标签才有效。不应该包含带变量的模板,而应该扩展它。
示例:
<强> variables.tpl:强>
{% set some_variable='123' %}
... more variables ...
{% block content %}
{% endblock %}
<强> template.tpl 强>
{% extends 'variables.tpl' %}
{% block content %}
{{ some_variable }}
... more code which uses variables assigned in variables.tpl ...
{% endblock %}
答案 2 :(得分:0)
如果要包含带变量的模板,则必须使用with
语句:
{% include %}提及的文档:
{# template.html will have access to the variables from the current context #}
{# and the additional ones provided #}
{% include 'template.html' with {'foo': 'bar'} %}
{% set vars = {'foo': 'bar'} %}
{% include 'template.html' with vars %}
的部分:强> 的
{# partial/width_partial #}
{{ width }}
索引文件:
{# index.twig #}
{% include 'partial/width_partial' with {'width': '100'} %}
{% set width = '200' %}
{{ width }}