【问题标题】:Generation a definition of a multi-dimensional array in javascript using smarty使用 smarty 在 javascript 中生成多维数组的定义
【发布时间】:2025-12-17 00:45:01
【问题描述】:

对不起,但我不是 JS 大师,而且我对这个完全一无所知。 如何在 javascript 输出中使用 smarty 生成多维数组。

var kreator_elements = new Array();

{foreach $kreator_elements as $element}

if(!kreator_elements[{$element->id_atrib}] instanceof Array)
    var kreator_elements[{$element->id_atrib}] = new Array();

kreator_elements[{$element->id_atrib}][{$element->id}] = new Array();
kreator_elements[{$element->id_atrib}][{$element->id}]['u_img'] = '{$element->getImageLink()}';
kreator_elements[{$element->id_atrib}][{$element->id}]['u_ico'] = '{$element->getIconLink()}';

{/foreach}

尝试了几种方法,使用 [] 等。目前它们都不适合我。控制台中总是出现某种错误。

【问题讨论】:

  • 不要这样混用两种语言,完全看不懂。尝试使用 PHP 构建一个 PHP 关联对象,然后使用 json_encode 将其转换为 JS 对象字面量
  • 哦...谢谢。现在只需要弄清楚如何通过 id_atrib 和 id reference 来获取元素。

标签: php javascript multidimensional-array smarty json


【解决方案1】:

尝试在纯 PHP 中构建关联数组,而不是使用 Smarty:

$tmp = array();
foreach ($kreator_elements as $element) {
    $tmp[$element->id_atrib][$element->id] = array(
        'u_img' => $element->getImageLink(),
        'u_ico' => $element->getIconLink()
    );
}
$kreator_elements_json = json_encode($tmp);

确保所有字符串都是 UTF-8 编码的,否则 json_encode 将失败。 如果没有,请在每个非 Unicode 字符串上运行 iconv()。

结果可以回显,因为它是正确的 javascript 对象,不需要 smarty。

在用另一种语言构建一种语言时,请始终尝试使用尽可能少的语言。如果您真的需要,请记住转义每个字符串,因为只有一个 ' 符号或换行符可能会导致生成的代码出现语法错误。

【讨论】:

  • 谢谢。的确,这是正确的做法。非常感谢您和 Bergi 的帮助!我建议自己使用这种外观,因为 Prestashop 开发人员更早在代码中就这样做了。