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}
と表記する。