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