gpt4 book ai didi

javascript - Twig 多个变量和 json_encode

转载 作者:行者123 更新时间:2023-12-02 15:54:03 24 4
gpt4 key购买 nike

首先,我对 Twig 还很陌生。我正在使用模板系统,以便用户可以设置一些选项来自定义模板。类似Shopify之类的东西。

我想知道是否可以获取所有设置并将它们发送到 javascript 函数以进一步处理它。

假设用户可以设置这些选项:

{{ theme.hide_label }} // option to show/hide a label
{{ theme.label_color }} // option to set a color for the label

我可以做这样的事情,然后获取这些变量并在 js 函数中使用它们:

 var hideLabel = '{{ theme.hide_label }}'; //true or false
var labelColor = '{{ theme.label_color }}'; // #000000

不幸的是,我有很多设置,所以这将是一个很长的列表。

我读过有关 json_encode 的内容。但是如何将所有这些设置/选项分组为可用于某个功能的内容?

类似这样的事情:

var themeFunctions = {{ theme.label; theme.hidelabel; | t_json | raw }}

我见过有人这样做,用 Twig 翻译大量文本:

var translations = {{ 'Add; Wishlist; Information; Add to wishlist;' | t_json | raw }};

然后创建一个像这样的函数:

function getAjaxTranslation(key) {
var translation;
if (translation = eval('translations["' + key + '"]')) {
return translation;
}
return key;
}

可以对非纯文本的变量执行类似的操作吗?

最佳答案

您可以使用json_encode用 Twig 过滤。

数据属性

<body data-theme-setting='{{ theme|json_encode|raw }}'>

脚本 block 内

<script type="text/javascript">
var themeSetting = JSON.parse('{{ theme|json_encode|raw }}');
</script>

隐藏输入

<input type="hidden" id="themeSetting" value='{{ theme|json_encode|raw }}' />

如果你的主题变量是普通对象,你可以直接编码,如果不是或者你想为变量创建白名单,请使用 set并创建新变量然后对其进行编码。

{% set themeSetting = {
foo : theme.foo,
label_color : theme.label_color,
username: theme.user.name
}|json_encode %}
<body data-theme-setting='{{ themeSetting|raw }}'></body>

Example fiddle

感谢@JoelM ,该解决方案的一个弱点是内容带有单引号。我们需要像下面这样手动转义单引号来解决这个问题。

{% set themeSetting = {
foo: "lorem's ipsum dolor's sit",
label_color : "hello world",
username: "this text have the ' single quote"
}|json_encode %}
<body data-theme-setting='{{ themeSetting|replace({"'":"\\'"})|raw }}'></body>

Example fiddle

关于javascript - Twig 多个变量和 json_encode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31706917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com