2013-05-03 140 views
1

它是我第一次与Smarty Template Engine一起工作,并且遇到了将以下PHP json_decode语句翻译为Smarty友好代码的麻烦。输出是一个数组,因为我在json_decode中使用了TRUE。如何在Smarty中使用json_decode

$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} 

但它不真正发挥作用。有什么建议么?

+0

“不真正起作用”是什么意思?它返回的东西,但不是你所期望的? – IMSoP 2013-05-04 22:22:46

回答

2

在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}