【问题标题】:How to use json_decode with Smarty如何在 Smarty 中使用 json_decode
【发布时间】:2013-05-03 13:24:30
【问题描述】:

这是我第一次使用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}

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

【问题讨论】:

  • “不起作用”是什么意思?它返回一些东西,但不是你所期望的?

标签: php smarty template-engine


【解决方案1】:

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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多