Smartyには、phpのjson_encode()
のように、配列からjsonを生成する標準関数または簡単な方法がありますか?
Smartyのドキュメントには表示されませんでした。ここで質問したいと思います。
これはうまくいくはずです。 @を使用すると、配列全体に対して修飾子をスマートに実行できます。それ以外の場合は、要素ごとに実行します。
{$myarray|@json_encode}
$ escape_html が有効になっている場合は、nofilter
を使用する必要があります。
{$myarray|@json_encode nofilter}
{$myarray|@json_encode}
は実際には、jsonでエンコードされた配列を出力しますが、特殊文字もエスケープするため、JavaScriptで配列を使用できなくなります。
特殊文字のエスケープを回避し、JavaScriptで配列を使用できるようにするには、nofilterフラグを使用します。
{$myarray|@json_encode nofilter}
PHPコードでjson_encode()
を使用してから、$smarty->assign()
関数を使用して値をsmartyに割り当てる必要があります。その後、javascriptを使用してテンプレートファイル内のその値を解析する必要があります。
コードスニペット:
{literal}
<script>
var json = JSON.parse('{/literal}{$your_json_encoded_array}{literal}');
//another statement
</script>
{/literal}
{literal}
<script type="text/javascript">
<!--
var newVar ={/literal}{$myarray|@json_encode nofilter};{literal}
// -->
</script>
{/literal}
私の解決策
何も知りません。 $ smarty-> assign(...)を使用して、json_encode()の結果を「phpコード」のsmarty変数に割り当て、テンプレートで使用できます。
また、json_decode()用のSmarty extension もあります。これに基づいて、反対の独自の拡張機能を作成するのは難しいことではありません。