symfony 使用模板设置变量

xzlaal3s  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(122)

我使用的是craftcms,他们使用的模板语言是Twig。
The _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的条目。blog/_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 %}

The_seo/_from_article_type_entry.html

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

这个想法是,我将能够Map字段到一个模板/在一个地方正确的关键字。所以我不必重用它的新闻/博客/故事模板的客户端想要的。但'seo'变量设置在_seo/_from_article_type_entry.html没有得到设置(要么根本没有,要么_layout/_seo_default.html没有及时找到它,并且总是使用默认值。如果我用_seo/_from_article_type_entry.html的内容替换blog/_entry.html中的{% include '_seo/_from_article_type_entry.html' with {entry: entry} %}行,它确实有效,所以它似乎没有在包含中设置。但我不知道我错过了什么。或者也许我正在尝试做一些Twig不应该做的事情。在任何情况下,任何帮助都是非常受欢迎的:)

vvppvyoh

vvppvyoh1#

包含的模板有自己的变量作用域,包含的模板之外的模板不能访问这些变量,如here所示
main.twig

{% set foo = 'foo' %}

{{ foo }}

{% include 'foo.twig' %}

{{ foo }}

foo.twig

{% set foo = 'bar' %}

{{ foo }}

相关问题