2009-08-16 14 views
14

In Smarty, c'è una funzione standard o un modo semplice per generare JSON da una matrice, come json_encode() in PHP? In realtà sembra che non ci sia nella documentazione smarty, ma volevo chiedere comunque.Come generare json con smarty?

Grazie, Sinan.

+0

Smarty si traduce in PHP, dopo tutto ... quindi perché non risparmiare un passo, giusto? :) – Zed

+4

@Al, commento contrassegnato, i requisiti sono stabiliti dalle società per cui lavoriamo, non da semplici mortali come noi. e trattare commenti come il tuo è peggio di quei requisiti. Saluti. – Sinan

risposta

63

Questo dovrebbe funzionare. @ Fa smarty eseguire il modificatore contro l'intero array, altrimenti lo fa per ogni elemento.

{$myarray|@json_encode} 

Se $escape_html è attivata, è necessario utilizzare nofilter:

{$myarray|@json_encode nofilter} 
+0

Grazie mille! –

+0

Non sapevo del @ modificatore! Questo ha risposto alla domanda. – karnage

+3

Questa è la migliore risposta. – MrBojangles

0

Non ne conosco. Puoi assegnare il risultato di json_encode() a una variabile smarty nel tuo 'codice php' con $ smarty-> assign (...), e quindi usarlo nel tuo modello.

Inoltre c'è una Smarty extension per json_decode(). Non dovrebbe essere difficile scrivere la tua estensione per l'opposto in base a questo.

+0

Ho pensato che ci sarebbe stato un modo come {$ var | json_encode}, Grazie comunque. – Sinan

+0

+1, l'idea di estensione è buona. – Sinan

4

è necessario utilizzare json_encode() in ur codice php quindi assegnare il valore di smarty usando $smarty->assign() la funzione. Dopo di che devi analizzare quel valore nel tuo file modello usando il javascript .

frammento di codice:

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

JSON.parse ha fatto il trucco! Grazie !! – Swathi

9

Mentre {$myarray|@json_encode} fa infatti emettere matrice codificato in JSON, sfugge anche caratteri speciali, rendendo l'array inutilizzabile in javascript.

Per evitare la fuga dei caratteri speciali e anche essere in grado di utilizzare la matrice in javascript uso della bandiera NoFilter:

{$myarray|@json_encode nofilter} 
+0

questa dovrebbe essere la risposta accettata. –

+0

Questo si applica solo se la classe Smarty ha $ escape_html impostato su true. Voglio dire, DOVREBBE essere se lo stai facendo bene, ma ancora. – Andrew