使用模板设置变量

时间:2019-06-26 22:22:24

标签: symfony twig craftcms

我正在使用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的内容,它将起作用,因此似乎没有在include中设置它。但是我不知道我在想什么。也许我正在尝试做Twig不应该做的事情。 无论哪种情况,都非常欢迎您提供帮助:)

1 个答案:

答案 0 :(得分:0)

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