前回はHTML_QuickFormの基礎を勉強したので、今回は応用。Smartyとの連携ってのをやってみる。
********************************************************************************
大きな流れ
********************************************************************************
addElement:オブジェクト設定
↓
addRule:検証ルール設定
↓
applyFilter:フィルタ設定。trimしたりとか
↓
(やっぱここでやるんでしょ?)
setDefaults:デフォルト値設定
setConstants:定数設定(上書きできない値。使いどころがイメージできない...)
↓
validate:検証実施
↓
freeze:凍結実施(検証がOKだったら)
↓
Smartyにデータを渡して表示
HTML_QuickForm利用の手引き
http://www.is.titech.ac.jp/~yanagis0/kei/quickform.html
を参考に、まずはPEARについているサンプルソースを見てみる。場所はPEARディレクトリ内の「doc/HTML_QuickForm/docs/renderers/SmartyStatic_example.php」。SmartyDynamic_example.phpもある。スタティックとダイナミックでどう違うかはよくわからんが、まずはスタティックの方のソースを追ってみることに。非Smartyとの違いは、99行目「// setup a template object」以降の処理だけっぽい。
validate&freeze以降の流れはこんな感じ。
Smartyオブジェクト生成
↓
生成したSmartyを渡しながらrendererオブジェクト生成
↓
初期設定(必須とかエラーとか。なんかよくわからん)
↓
HTML_QuickFormオブジェクトにrendererオブジェクトを渡す(accept())
↓
Smartyオブジェクトにテンプレート変数を登録
↓
Smarty->display();
なのだそうな。
テンプレート変数については、例えば
$form->addElement('header', 'MyHeader', 'QuickFormのテスト');
$form->addElement('text', 'name', 'あなたのお名前は?');
$form->addElement('submit', 'btnSubmit', '送信');
//(略)
$tmpl->assign('form', $renderer->toArray());
と登録すれば、テンプレートの方からは{$form.header.MyHeader}で「QuickFormのテスト」にアクセスできる。ただしこれはヘッダに限った話で、その他のフォームオブジェクトへのアクセス方法としては{$form.name.label}で「あなたのお名前は?」に、{$form.name.html}でフォームオブジェクトのHTMLにアクセスできる模様。
ただしsubmitボタンについては、{$form.btnSubmit.label}とやっても「送信」とは表示されない。resetボタンも同様({$form.btnSubmit.value}か?)。
一番重要な<form>タグへ設定する属性値へは{$form.attributes}でアクセスできる。つまり<form {$form.attributes}>と書けばいいみたい。まあとにかくやってみる。