2009-08-16 38 views
14

En Smarty, ¿existe una función estándar o una forma sencilla de generar json a partir de una matriz, como lo hace json_encode() en php? En realidad, parece que no hay en la documentación inteligente, pero quería preguntar de todos modos.¿Cómo generar json con smarty?

Gracias, Sinan.

+0

Smarty se traduce en PHP después de todo ... ¿por qué no ahorrar un paso, ¿verdad? :) – Zed

+4

@Al, comentario marcado, los requisitos son establecidos por las empresas para las que trabajamos, no por simples mortales como nosotros. y lidiar con comentarios como los tuyos es peor que esos requisitos. aclamaciones. – Sinan

Respuesta

63

Esto debería funcionar. @ Hace que smarty ejecute el modificador contra toda la matriz, de lo contrario lo hace para cada elemento.

{$myarray|@json_encode} 

Si $escape_html está habilitado, tendrá que utilizar nofilter:

{$myarray|@json_encode nofilter} 
+0

¡Muchas gracias! –

+0

¡No sabía sobre el modificador @! Esto respondió la pregunta. – karnage

+3

Esta es la mejor respuesta. – MrBojangles

0

No conozco ninguno. Podría asignar el resultado de json_encode() a una variable inteligente en su 'código php' con $ smarty-> assign (...), y luego usarlo en su plantilla.

También hay un Smarty extension para json_decode(). No debería ser difícil escribir su propia extensión por lo contrario en función de esto.

+0

Pensé que habría una manera como {$ var | json_encode}, gracias de todos modos. – Sinan

+0

+1, la idea de la extensión es buena. – Sinan

4

usted tiene que utilizar json_encode() en ur código php a continuación, asignar el valor a Smarty usando $smarty->assign() función. Después de eso tienes que analizar ese valor en tu archivo de plantilla usando javascript.

fragmento de código:

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

¡JSON.parse hizo el truco! Gracias !! – Swathi

9

Mientras {$myarray|@json_encode} de hecho emitir la matriz codificado en JSON, también se escapa caracteres especiales, por lo que la matriz inutilizable en javascript.

Para evitar escape de caracteres especiales y también ser capaz de utilizar la matriz en javascript uso la bandera NOFILTER:

{$myarray|@json_encode nofilter} 
+0

esta debería ser la respuesta aceptada. –

+0

Esto solo se aplica si su clase Smarty tiene $ escape_html configurado en verdadero. Quiero decir, DEBERÍA ser si lo estás haciendo bien, pero aún así. – Andrew