2013-02-27 62 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