Jul16:Smartyの使い方(1)

作ったフォームを入力部分、確認部分、完了部分の3つのテンプレートに分けて、それをPHPで出力する。

  • 入力フォーム(form.tpl)

テンプレートは通常拡張子は.tplとなり、PHPっぽいこととHTMLを組み合わせて作る。変化したところを主に記すと、
テキストボックス

<input type="text" size="45" name="lastname" value="{$smarty.post.lastname}"><br><br>

valueの部分に注目する。valueはテキストボックスの中の初期値を入れる値だが、PHPでは「isset()」を使わないとNoticeErrorが出てたのだが、Smartyでは出ないらしい。
この{$smarty.post.lastname}は、$_POST["lastname"]の値をSmartyで書いたもので、配列の表記が

array[a]→array.a

となることを表す。なお、$_POSTの値は一回PHPに渡したら別の変数で再びアサインしないと思ってたが、そんなことはしないでも$smarty.postとか$smarty.getとかで出来るらしい。
テキストボックスから学んだことはこのあたり。

ラジオボタン
ラジオボタンは以下のように書く。

{html_radios name="sex" options=$sex_array checked=$smarty.post.sex}

ちなみに、$sex_array=array("m"=>"男","f"=>"女");
である。
ブラウザでの表記は、

<label><input type="radio" name="sex" value="m" />男</label>
<label><input type="radio" name="sex" value="f" />女</label>

となる。
html_radiosでSmartyラジオボタンを作る。後のoptionは、

  • name・・・inputのnameの値
  • options・・・値の設定、ラジオボタンの場合は、配列のキー値がvalueとなり、ラジオボタン横に配列のvalueの値が表示される。
  • checked・・・デフォルトのチェックする場所の設定をする。今回はデフォルトでチェックはなく、確認画面からのPOSTの値

ラジオボタンvalueの値と一緒の時checkedとなるように設定した。

セレクトボックス
セレクトボックスは以下のように書く。

<select name="prefid">
{html_options options=$pref_array selected=$smarty.post.prefid}
</select>

 
{html_options} は、HTML の <select><option> グループにデータを代入して作成するカスタム関数。$pref_arrayは、キーに数字で値に都道府県が入ったデータである。
ブラウザでは、

<select name="prefid">
<option label="北海道" value="1">北海道</option>
<option label="青森県" value="2">青森県</option>
<option label="岩手県" value="3">岩手県</option>
<option label="宮城県" value="4">宮城県</option>
<option label="秋田県" value="5">秋田県</option>
<option label="山形県" value="6">山形県</option>
・
・
・
<option label="沖縄県" value="47">沖縄県</option>

</select>

となっている。ラジオボタンでもそうだったけども、selectedは確認画面から戻ってきた配列の値がvalueと一緒ならよいので、smartyの表記でselected=$smarty.post.prefidとした。

チェックボックス
難敵チェックボックス
テンプレートでの記述は、

{html_checkboxes name='h_array' options=$hobby_array separator='<br>' selected=$smarty.post.h_array}

表示ページのソースでは、

<label><input type="checkbox" name="h_array[]" value="music" />音楽</label><br>
<label><input type="checkbox" name="h_array[]" value="movie" />映画</label><br>
<label><input type="checkbox" name="h_array[]" value="other" />その他</label><br>

とした。テンプレートでname,optionsはラジオボタン、セレクトボックスと変わらないけども、新しく、separatorというのが出てきた。separatorは一つのをどのように区切るかを指定する。今回は
で区切ることにした。
selectedの部分は最後が配列になっている。これは複数selectedがあるチェックボックス独特の形で、$smarty.post.h_arrayのvalueの値とソースのvalueの値が一緒だった時にselectedにするという感じ。

またSmartyでは、PHPでデバックの時によく使うvar_dumpを

{$a|@var_dump}

と表記する。