Используйте шаблон для установки переменной - PullRequest
0 голосов
/ 27 июня 2019

Я использую 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 работает, так что, похоже, это не устанавливается в include. Но я не могу понять, чего мне не хватает. Или, может быть, япытаясь сделать что-то, чего не должен делать Twig. В любом случае, любая помощь будет очень кстати :)

1 Ответ

0 голосов
/ 27 июня 2019

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

...