Smartyで javascriptに PHPの配列を渡す

  • 投稿日:
  • by
  • カテゴリ:
  • ハッシュタグ:

PHPから javascript(以下、JS)へは、配列をそのままの形で渡すことができません。 PHPの配列を展開して JSで配列定義をし直すことになります。

だったら JSONか Ajaxで渡した方がいい、という場合もあるでしょう。
でもSmartyを使ってて、テンプレートに配列を渡しているなら、そちらで展開するのがいいですね。

PHP側で $data['month'] = array(1, 2, 3, 4, 5, 6); という配列を作って渡したとして、テンプレートにこんな風に書いておけば、JSで配列定義してくれます。

var ticker = new Array( {foreach $data.month as $val}"{$val}月"{if not $val@last}, {/if}{/foreach} );

もちろんSmartyじゃなくてPHPでも当然出来るのですけどね。


JSといえば、Smartyのテンプレートに記述するには {literal} {/literal} を使わなければならなかったりで面倒だったのですが、

{literal} | Smarty

Note
{literal}{/literal} タグは通常は不要です。Smarty は、 空白文字で囲まれたデリミタを無視するからです。 Javascript や CSS で波括弧を使う場合は両側に空白文字を入れるようにしましょう。 これは、Smarty 3 以降の新しい挙動です。

という訳で、少し不便が解消しました。