使用模板设置变量
Use a template to set a variable
我正在使用 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 条目。 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 %}
_seo/_from_article_type_entry.html
{% set seo = { title: entry.title, description: entry.short_description } %}
我的想法是我可以将字段映射到一个模板/一个位置中的正确键。所以我不必将它重复用于客户想要的 news/blog/story 模板。但是在 _seo/_from_article_type_entry.html 中设置的 'seo' 变量没有被设置(要么根本没有,要么没有及时被 _layout/_seo_default.html 拾取,并且总是使用默认值.
如果我用 _seo/_from_article_type_entry.html
的内容替换 blog/_entry.html
中的 {% include '_seo/_from_article_type_entry.html' with {entry: entry} %}
行,它确实有效,所以它似乎没有在包含中设置。但我无法弄清楚我错过了什么。或者也许我正在尝试做一些 Twig 不应该做的事情。
无论哪种情况,我们都非常欢迎任何帮助:)
包含的模板有自己的变量范围,包含的模板之外的模板无法访问这些变量,如 here
我正在使用 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 条目。 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 %}
_seo/_from_article_type_entry.html
{% set seo = { title: entry.title, description: entry.short_description } %}
我的想法是我可以将字段映射到一个模板/一个位置中的正确键。所以我不必将它重复用于客户想要的 news/blog/story 模板。但是在 _seo/_from_article_type_entry.html 中设置的 'seo' 变量没有被设置(要么根本没有,要么没有及时被 _layout/_seo_default.html 拾取,并且总是使用默认值.
如果我用 _seo/_from_article_type_entry.html
的内容替换 blog/_entry.html
中的 {% include '_seo/_from_article_type_entry.html' with {entry: entry} %}
行,它确实有效,所以它似乎没有在包含中设置。但我无法弄清楚我错过了什么。或者也许我正在尝试做一些 Twig 不应该做的事情。
无论哪种情况,我们都非常欢迎任何帮助:)
包含的模板有自己的变量范围,包含的模板之外的模板无法访问这些变量,如 here