我正在研究一个基于树枝patternlab框架的项目。我的大多数内容都使用JSON文件,尤其是页面。
我想将链接(由原子构建)集成到从JSON文件中获得的文本中,该文本具有链接的占位符。我正在处理来自多语言cms的文本,因此在文本内容中放置占位符是保持其灵活性的最简单方法。
这是我的json文件的摘录
{
"legal" : "Mit dem Absenden des Formulars akzeptieren Sie unsere #{ legalLink }.",
"deeplink" : {
"label" : "Datenschutzbedingungen",
"url" : "#AGB_link"
}
}
这是在我的树枝模板中
{# __ build the link __ #}
{% set legalLink %}
{% include "atoms-link" with contact.deeplink %}
{% endset %}
{# __ set up the string with interpolation placeholder __ #}
{% set legalText_a = "Mit dem Absenden des Formulars akzeptieren Sie unsere #{ legalLink }." %}
{% set legalText_b = contact.legal %}
{% set legalText_c %}
{% include contact.legal %}
{% endset %}
{# __ dump to check/debug how it comes out __ #}
{{ dump (legalText_a) }}<hr>
{{ dump (legalText_b) }}<hr>
{{ dump (legalText_c) }}<hr>
{# __ output the result __ #}
<p>A) {{ legalText_a|raw }}</p>
<p>B) {{ legalText_b|raw }}</p>
<p>C) {{ legalText_c|raw }}</p>
这是我的结果(都是转储最后的HTML。
string(121) "Mit dem Absenden des Formulars akzeptieren Sie unsere Datenschutzbedingungen ."
string(69) "Mit dem Absenden des Formulars akzeptieren Sie unsere #{ legalLink }."
object(Twig_Markup)#2627 (2) { ["content":protected]=> string(78) " Mit dem Absenden des Formulars akzeptieren Sie unsere #{ legalLink }. " ["charset":protected]=> string(5) "UTF-8" }
A) Mit dem Absenden des Formulars akzeptieren Sie unsere Datenschutzbedingungen.
B) Mit dem Absenden des Formulars akzeptieren Sie unsere #{ legalLink }.
C) Mit dem Absenden des Formulars akzeptieren Sie unsere #{ legalLink }.
选项A完美运行,当我使用带有字符串的细枝集时,插值开始,一切正常输出。但这在我的模板代码中包含一个字符串...那不是我想要的。
选项B是我第一次尝试使用JSON文件中的字符串,但是当我将var与字符串作为集合使用时,插值不会生效。我尝试了| raw的多个变体,但是不确定结果总是一样。
选项C也不起作用。使用带有include的twig set作为一个大块,会将其转换为twig标记代码,而根据我最近的经验,这几乎不能用于任何事情。我仍然认为我会尝试一下。
有没有一种方法可以使插值起作用,或者用twig / patternlab有一个很好的替代方法来获得我要实现的目标?
答案 0 :(得分:1)
要解决此问题,您首先需要启用扩展名Twig_Extension_StringLoader
。这使您可以访问函数template_from_string,该函数使您能够在twig
内部“创建”模板并(重新)启用所需的字符串插值。
注册扩展名
$twig->addExtension(new Twig_Extension_StringLoader());
使用template_from_string
达到预期效果
{% set legalLink = 'Datenschutzbedingungen' %}
{{ include(template_from_string('{{ "'~contact.legal~'" }}')) }}