Используйте шаблон для установки переменной

Я использую craftcms, а язык шаблонов, который они используют, — Twig.

_layout/base.html:

<!DOCTYPE html>
<html>
<head>
    {% include '_layout/_seo_default.html %}
</head>

_layout/_seo_default.html:

{% if seo is not defined %}
    {% set seo = {title: "Default values for things", description:"Default Description"} %}
{% endif %}
<title>{{ seo.title }}</title>
<meta name = "description" content = "{{ seo.description }}">

У меня есть шаблон blog/_entry, который показывает запись из CMS на основе URL-адреса. Блог/_entry.html:

{% extends '_layout/base.html' %}
{% block main %}
    {# i want this include to set a variable used in _seo_default.html #}
    {% include '_seo/_from_article_type_entry.html' with {entry: entry} %}
    <article>
        html irrelevant to question
    </article>
{% endblock %}

_seo/_from_article_type_entry.html

{% set seo = { title: entry.title, description: entry.short_description } %}

Идея заключалась в том, что я смогу сопоставить поля с правильными ключами в одном шаблоне/в одном месте. Поэтому мне не нужно повторно использовать его для шаблонов новостей/блогов/историй, которые хочет клиент. Но переменная 'seo', установленная в _seo/_from_article_type_entry.html, не устанавливается (либо вообще, либо не вовремя, когда _layout/_seo_default.html подхватывает ее, и всегда используются значения по умолчанию. Если я заменю строку {% include '_seo/_from_article_type_entry.html' with {entry: entry} %} в blog/_entry.html содержимым _seo/_from_article_type_entry.html, это сработает, поэтому кажется, что оно просто не устанавливается во включении. Но я не могу понять, чего мне не хватает. Или, может быть, я пытаюсь сделать что-то, чего не должен делать Twig. В любом случае, любая помощь будет очень кстати :)

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
159
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Включенные шаблоны имеют свою собственную область переменных, шаблоны за пределами включенного не могут получить доступ к этим переменным, как показано здесь

Хм, звучит как «невозможно с {% set %}». Я попытаюсь заставить что-то работать с блоком. Спасибо за пример! И за твигфиддл! О таком еще не знал.

Vincent 27.06.2019 15:24

Вы наверняка хотите взглянуть на вставлять

DarkBee 27.06.2019 15:54

Другие вопросы по теме