twig - Patternlab / Twig 变量插值不适用于 json 中的字符串
问题描述
我正在开发一个基于 twig 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 完美地工作,当我使用带有字符串的 twig set 时,插值开始并且一切都正确输出。但这就是我的模板代码中的一个字符串......这不是我想要的。
选项 B 是我第一次尝试使用 JSON 文件中的字符串,但是当我使用 var 和字符串作为集合时,插值不起作用。我尝试了多种变体 |raw 并且不确定还有什么,但结果是总是一样。
选项 C 也不起作用。使用 twig set 和 include 作为一个块将其转换为 twig 标记代码,从我最近的经验来看,这几乎不能用于任何事情。我还是想试试看。
有没有办法让插值工作,或者是否有一个很好的选择与 twig/patternlab 来获得我想要实现的目标?
解决方案
要解决此问题,您首先需要启用扩展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~'" }}')) }}
推荐阅读
- google-apps-script - 使用脚本创建 PDF 没有格式
- php - 如何在 PHP 中正确连接
- python - 如何在 Qiskit 中进行量子比特观测建模
- r - 使用 install.packages 时与编译相关的错误
- python - 关于 Blender Python 中的模态运算符
- splunk - 带有 GUID 的丢失日志的 Splunk 警报
- azure-data-factory - Get Metadata 如何对其输出进行排序/排序?
- ios - 如何为 UITableView 标题设置颜色文本颜色
- c++ - 指向 STL 容器行为的指针
- spring - OneToOne 映射上的 EntityNotFoundException,即使实体存在