Используйте переменные пользовательского набора Twig из Include

Я пытаюсь включить файл twig с кучей пользовательских переменных набора, а затем использовать переменные в нескольких других файлах шаблонов. Подобно тому, как работает PHP-файл.

у меня, похоже, нет доступа к переменным, установленным внутри include в моем индексном файле.

есть ли способ сделать это?

Пример Кода *редактировать

Файл:

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

шаблон Файл:

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

Ожидаемые Результаты:

100 250

Фактический Результат:

// Nothing gets output

3 ответов


Я просто пытался сделать то же самое, что ты и придумал следующее:

создано snippets.twig для поддержания всех этих мини-переменных. В вашем случае, вы могли бы назвать это variables.twig. В этом файле я использовал макрос без каких-либо аргументов. Я создавал форматированную разметку даты ввода, которую я могу использовать во всех моих шаблонах, и это выглядело так:

{% macro entry_date() %}
<time datetime="{{post.post_date|date('m-d-Y')}}">{{post.post_date|date('F j, Y')}}</time>
{% endmacro %}

обратите внимание, что скобки после объявления имени императив

в моем основном файле макета,layout.twig, я ссылался на этот макрос через импорт заявление, чтобы оно было доступно во всех дочерних шаблонах:

{% import "snippets.twig" as snippets %}
<!doctype html>
...

в моих файлах шаблонов у меня теперь есть snippets доступно и может запросить его, как и любую другую переменную:

{{ snippets.entry_date }}

обновление

это, похоже, неправильно запустить код. Если вы просто храните статический контент, вы должны быть хороши. Вы также можете пройти args к макро, поэтому я думаю, что вы могли бы сделать там какую-то магию, но я не пробовал.


насколько я знаю, это возможно только с {% extends %} тег. Вместо того, чтобы включать шаблон с переменными, вы должны расширить его.

пример:

переменные.tpl:

{% set some_variable='123' %}
... more variables ...

{% block content %}
{% endblock %}

шаблон.tpl

{% extends 'variables.tpl' %}

{% block content %}
{{ some_variable }}
... more code which uses variables assigned in variables.tpl ...
{% endblock %}

вам придется использовать 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 }}