2013-02-27 79 views
0

对不起,但我不是JS master和tbh,我对这个完全无能为力。我怎样才能生成multidmensionall数组在JavaScript输出中使用smarty。使用smarty生成JavaScript中多维数组的定义

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} 

尝试了几种方法,与[]等等。他们没有一个为我现在工作。总是在控制台中出现某种错误。

+2

不要混合这样的两种语言,它是完全不可理解的。试着用PHP创建一个PHP关联对象,然后用'json_encode'将它转换成一个JS对象文字' – Bergi 2013-02-27 12:42:35

+0

哦......谢谢。现在只需要弄清楚如何通过id_atrib和id引用获取元素。 – Grzegorz 2013-02-27 13:40:57

回答

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); 

制作suere所有字符串是UTF-8编码,或json_encode将失败。 如果不是,请在每个非unicode字符串上运行iconv()。

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

在另一个语言中构建一种语言时,请尽量使用尽可能少的语言。如果你真的必须这样做,那么记住要逃避每个字符串,因为只有一个'符号或换行符可能会导致生成的代码中的语法错误。

+0

谢谢。事实上,这是正确的做法。非常感谢你和Bergi的帮助! 自从Prestashop开发人员早些时候在代码中完成这项工作后,我提出了自己的建议。 – Grzegorz 2013-02-27 17:04:04