web-dev-qa-db-ja.com

smartyでjsonを生成する方法は?

Smartyには、phpのjson_encode()のように、配列からjsonを生成する標準関数または簡単な方法がありますか?

Smartyのドキュメントには表示されませんでした。ここで質問したいと思います。

17
Sinan

これはうまくいくはずです。 @を使用すると、配列全体に対して修飾子をスマートに実行できます。それ以外の場合は、要素ごとに実行します。

{$myarray|@json_encode}

$ escape_html が有効になっている場合は、nofilterを使用する必要があります。

{$myarray|@json_encode nofilter}
79
Tom Haigh

{$myarray|@json_encode}は実際には、jsonでエンコードされた配列を出力しますが、特殊文字もエスケープするため、JavaScriptで配列を使用できなくなります。

特殊文字のエスケープを回避し、JavaScriptで配列を使用できるようにするには、nofilterフラグを使用します。

{$myarray|@json_encode nofilter}
10
m_katsifarakis

PHPコードでjson_encode()を使用してから、$smarty->assign()関数を使用して値をsmartyに割り当てる必要があります。その後、javascriptを使用してテンプレートファイル内のその値を解析する必要があります。

コードスニペット:

{literal}
<script>
var json = JSON.parse('{/literal}{$your_json_encoded_array}{literal}');
//another statement
</script>
{/literal}
5
Kanagu
{literal}
<script type="text/javascript">
<!--
var newVar ={/literal}{$myarray|@json_encode nofilter};{literal}
// -->
</script>
{/literal}

私の解決策

1
Sarath E

何も知りません。 $ smarty-> assign(...)を使用して、json_encode()の結果を「phpコード」のsmarty変数に割り当て、テンプレートで使用できます。

また、json_decode()用のSmarty extension もあります。これに基づいて、反対の独自の拡張機能を作成するのは難しいことではありません。

0
Zed