我第一次使用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}
但它确实不起作用。有什么建议吗?
答案 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}
来轻松完成。