如何在Smarty中使用json_decode

时间:2013-05-03 13:24:31

标签: php smarty template-engine

我第一次使用Smarty Template Engine时,我遇到了将以下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}

但它确实不起作用。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

Smarty那条线上的一切都是错的;让我们按顺序完成:

{ assign

不要在{和Smarty标签之间留一个空格;如果Smarty 3的"auto-literal" feature被打开,它将假定文字{不是Smarty标签。

var  $itemArray = 

您似乎在这里混合了两种不同的功能。 Smarty {assign} function采用{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}来轻松完成。