0

我正在使用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 模板,它根据 url 显示来自 CMS 的条目。博客/_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/_from_article_type_entry.html 中设置的 'seo' 变量没有设置(根本没有,或者没有及时 _layout/_seo_default.html 选择它,并且始终使用默认值。如果我替换该{% include '_seo/_from_article_type_entry.html' with {entry: entry} %}行与它blog/_entry.html的内容一起_seo/_from_article_type_entry.html工作,所以它似乎没有在包含中设置。但我无法弄清楚我错过了什么。或者我正在尝试做一些 Twig 不应该做的事情做。在任何一种情况下,任何帮助都会非常受欢迎:)

4

1 回答 1

0

包含的模板有自己的变量范围,包含的模板之外的模板无法访问这些变量,如此处所示

于 2019-06-27T05:32:59.957 回答