2009-08-16 18 views
14

W Smarty, czy istnieje standardowa funkcja lub łatwy sposób generowania json z tablicy, jak json_encode() robi w php? Właściwie wydaje się, że nie ma w dokumentacji smarty, ale chciałem zapytać tak czy inaczej.Jak wygenerować json z smarty?

Dzięki, Sinan.

+0

Smarty jest przetłumaczony na PHP mimo wszystko ... więc dlaczego nie zapisać krok, prawda? :) – Zed

+4

@Al, komentarz oznaczony, wymagania są ustalane przez firmy, dla których pracujemy, a nie przez zwykłych śmiertelników takich jak my. a radzenie sobie z komentarzami podobnymi do twoich jest gorsze niż te wymagania. Twoje zdrowie. – Sinan

Odpowiedz

63

To powinno zadziałać. @ Powoduje, że smarty uruchamia modyfikator względem całej tablicy, w przeciwnym razie robi to dla każdego elementu.

{$myarray|@json_encode} 

Jeśli $escape_html jest włączona, będzie trzeba użyć nofilter:

{$myarray|@json_encode nofilter} 
+0

Wielkie dzięki! –

+0

Nie wiedziałem o modyfikatorze @! To odpowiadało na pytanie. – karnage

+3

To jest najlepsza odpowiedź. – MrBojangles

0

Nie znam żadnych. Możesz przypisać wynik json_encode() do smarty w twoim "php code" za pomocą $ smarty-> assign (...), a następnie użyć go w swoim szablonie.

Istnieje również Smarty extension dla json_decode(). Nie powinno być trudno napisać własne rozszerzenie na przeciwieństwo w oparciu o to.

+0

Myślałem, że będzie sposób jak {$ var | json_encode}, dzięki i tak. – Sinan

+0

+1, pomysł rozszerzenia jest dobry. – Sinan

4

Musisz użyć json_encode() ur kodu php następnie przypisać wartość do Smarty za pomocą $smarty->assign() funkcję. Następnie musisz przeanalizować tę wartość w pliku szablonu przy użyciu javascript.

fragment kodu:

{literal} 
<script> 
var json = JSON.parse('{/literal}{$urarray}{literal}'); 
//another statments 
</script> 
{/literal} 
+0

JSON.parse zrobił lewę! Dziękuję Ci !! – Swathi

9

Podczas {$myarray|@json_encode} się w rzeczywistości emitują tablicy zakodowany JSON również uchodzi znaków specjalnych, dzięki czemu układ nadaje się do użytku w JavaScript.

Aby uniknąć ucieczki znaków specjalnych, a także mieć możliwość korzystania z tablicy w JavaScript użyć flagi nofilter:

{$myarray|@json_encode nofilter} 
+0

to powinna być zaakceptowana odpowiedź. –

+0

Ta zasada ma zastosowanie tylko wtedy, gdy klasa Smarty ma wartość $ escape_html ustawioną na wartość true. To znaczy, powinno to być, jeśli robisz to dobrze, ale nadal. – Andrew