Используйте переменные пользовательского набора 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 }}