2009-08-16 12 views
14

In Smarty gibt es eine Standardfunktion oder eine einfache Möglichkeit, Json aus einem Array zu generieren, wie json_encode() in PHP tut? Eigentlich scheint es da keine Smarty-Dokumentation zu geben aber wollte sowieso fragen.Wie json mit smarty generieren?

Danke, Sinan.

+0

Smarty in PHP übersetzt wird, nachdem alle ... also warum nicht einen Schritt sparen, nicht wahr? :) – Zed

+4

@Al, Kommentar markiert, Anforderungen werden von Unternehmen, für die wir arbeiten, nicht von Normalsterblichen wie uns festgelegt. und der Umgang mit Kommentaren wie deinem ist schlimmer als diese Anforderungen. Prost. – Sinan

Antwort

63

Dies sollte funktionieren. Das @ macht Smarty den Modifikator für das gesamte Array ausführen, ansonsten für jedes Element.

{$myarray|@json_encode} 

Wenn $escape_html aktiviert ist, müssen Sie nofilter verwenden:

{$myarray|@json_encode nofilter} 
+0

Vielen Dank! –

+0

Ich wusste nicht über den @ Modifikator! Dies beantwortet die Frage. – karnage

+3

Dies ist die beste Antwort. – MrBojangles

0

Ich kenne keine. Sie könnten das Ergebnis von json_encode() einer Smarty-Variablen in Ihrem 'PHP-Code' mit $ smarty-> assign (...) zuweisen und dann in Ihrer Vorlage verwenden.

Auch gibt es ein Smarty extension für json_decode(). Es sollte nicht schwer sein, auf dieser Grundlage eine eigene Erweiterung für das Gegenteil zu schreiben.

+0

Ich dachte, es gäbe einen Weg wie {$ var | json_encode}, danke trotzdem. – Sinan

+0

+1, die Erweiterung Idee ist gut. – Sinan

4

Sie haben json_encode() in ur PHP-Code zu verwenden, dann den Wert zuweisen mit $smarty->assign() Funktion Smarty. Danach müssen Sie diesen Wert in Ihrer Vorlagendatei mit Javascript analysieren.

Codefragment:

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

JSON.parse hat den Trick! Vielen Dank !! – Swathi

9

{$myarray|@json_encode} Während in der Tat emittiert das Array in json codiert, entweicht auch Sonderzeichen, so dass die Anordnung unbrauchbar in JavaScript.

Sonderzeichen zu entkommen Um zu vermeiden, und die NoFilter Flagge das Array nutzen können auch in Javascript-Einsatz:

{$myarray|@json_encode nofilter} 
+0

Dies sollte die akzeptierte Antwort sein. –

+0

Dies gilt nur, wenn Ihre Smarty-Klasse $ escape_html auf true gesetzt hat. Ich meine, es SOLLTE sein, wenn du es richtig machst, aber trotzdem. – Andrew