1

这是我第一次使用Smarty 模板引擎,我在将以下 PHP json_decode 语句转换为 Smarty 友好代码时遇到了麻烦。输出是一个数组,因为我在 json_decode 中使用了 TRUE。

$itemArray = json_decode($dni-content-slider-id-prefix-saved-content-picker-item- . $promos, true)

我试过了

{ assign var  $itemArray = value=$dni-content-slider-id-prefix-saved-content-picker-item-|cat:$promos|json_decode}

但它并没有真正起作用。有什么建议么?

4

1 回答 1

4

Smarty 中的几乎所有内容都是错误的。让我们按顺序进行:

{ assign

不要在 the{和 Smarty 标签之间放置空格;如果 Smarty 3 的“自动文字”功能打开,它将假定这是文字{而不是 Smarty 标签。

var  $itemArray = 

您似乎在这里混合了两种不同的功能。Smarty{assign}函数采用{assign var=some_name value=$some_value}. 请注意,var参数是要分配的变量的名称,因此不需要$.

Smarty 3 也有一个 PHP 风格的“short-form assign”,看起来像{$some_name=$some_value}(完整的$,但没有assign关键字)。

value=$dni-content-slider-id-prefix-saved-content-picker-item-|cat:$promos

这会将变量的内容$dni-content-slider-id-prefix-saved-content-picker-item-视为字符串,并将变量的内容$promos(也视为字符串)添加到它的末尾。再看一遍,我发现这也是您的 PHP 代码所做的事情,但这似乎是一件很奇怪的事情,因为第一个变量必须"{'foo':'bar',"类似于"'baz':'quux'}". 为什么你会有这样的变量?

基于 PHP 代码相同,我将假设这一段是错误的 我怀疑你想要的是一个变量变量名(代码运行时的不同变量);有办法做到这一点,但这不是其中之一。这通常也是一个非常糟糕的主意。如果你想要很多类似的变量,你可以在运行时从中选择,把它们放在一个关联数组中,然后索引类似$dni-content-slider-id-prefix-saved-content-picker-items[$promos].

|json_decode}

最后,与您的问题实际相关的部分。您指出在 PHP 中,您将可选true参数传递给json_decode函数,但在此 Smarty 代码中,您没有这样做。这可以通过:true在末尾添加来轻松完成,如{assign var=itemArray value=$jsonString|json_decode:true}.

于 2013-05-04T22:39:41.040 回答