09. 1月 2013 · [Smarty] テンプレート内で連想配列を宣言して使用する はコメントを受け付けていません。 · Categories: WEB制作 · Tags: , ,

ちょっとハマったけど地味に便利だったのでメモ。

Smarty は PHP から配列を渡すことで、ラジオボタンやチェックボックスを簡単に作ってくれる機能があります。そして、テンプレート内で PHP の関数を使用できます。

PHP から渡す値は SQL で読み込んだデータそのもの、という単純な状態の場合、簡単な連想配列を使ってラジオボタンを作りたいという状況になりました。PHP のコードは追加したくない、Smarty だけで何とかしたい…と考えて、調べてみた結果、自分が求める方法はこちらが一番近いと感じました。

Smarty のテンプレートで配列を定義する – XCL Labo

ですが、これだと連想配列が使えません。考え方を変えて、連想配列を使わなくてもいいようにする、という方法も考えましたが、PHP の関数が使える → unserialize 使えばいけるんじゃね?ということで、Smarty のテンプレート内で連想配列を使う方法を考えてみました。

PHP 側でちょっとした準備が必要です(あとで消す)

unserialize するためには、serialize されたデータがなくてはなりません。簡単な配列をシリアライズしたものを一旦画面に表示させます。

echo serialize(array(‘Y’=>’はい’, ‘N’=>’いいえ’));

すると、配列がシリアライズされて表示されます。

a:2:{s:1:”Y”;s:6:”はい”;s:1:”N”;s:9:”いいえ”;}

これを Smarty で使ってしまおう!というわけですね。このシリアライズされた文字列が取得できれば、 PHP で記述した上記のコードはもういりません。

あとは Smarty だけでなんとかするよ

さて、これを Smarty で使うためには、一度変数に格納してから unserialize する必要があります。unserialize したデータは配列になっているので、ラジオボタンやチェックボックスに使うことができます。

シリアライズしたデータを Smarty で使うにあたってのポイントは、デリミタを変数で使用すること。こうしないと正常に渡せません。また、シングルクォーテーションで囲んでしまうと変数が無効になるので、そのまま渡しても良いのではないかと。


Comments closed