从包含中使用Twig自定义集变量

时间:2013-12-05 20:38:47

标签: symfony twig

我正在尝试使用一堆自定义设置变量包含一个twig文件,然后使用多个其他模板文件中的变量。类似于包含PHP文件的方式。

我似乎无法访问索引文件中include中设置的变量。

有没有办法做到这一点?

示例代码 * 已编辑

包含的文件:

{# variables.html #}
{% set width = "100" %}
{% set height = "250" %}

模板文件:

{# index.html #} 
{% include 'variables.html' %}
{{ width }}
{{ height }}

预期结果:

100 250

实际结果:

// Nothing gets output

3 个答案:

答案 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 }}