QuickFormのdisplay関数で出力したフォームはお世辞にもデザイン的に優れているとはいえません。
そこで、デザイン部分をSmartyに担当させQuickFormとSmartyを連携させたいと思います。
<html> <head> <title>QuickForm サンプル</title> </head> <body> <?php require_once 'HTML/QuickForm.php'; require_once 'HTML/QuickForm/Renderer/ArraySmarty.php'; require_once 'Smarty.class.php'; $objQF = new HTML_QuickForm('frmQF', 'get'); $defaultValue = array('txtNAME'=>'bnote','rdoSEX'=>'男'); $objQF->addElement('text', 'txtNAME', 'お名前は?'); $objQF->addElement('radio', 'rdoSEX','', '男',0); $objQF->addElement('radio', 'rdoSEX','', '女',1); $objQF->addElement('reset', 'btnCLEAR', 'クリア'); $objQF->addElement('submit', 'btnSUBMIT', '送信'); //デフォルト値の設定 $objQF->setDefaults($defaultValue); if ($objQF->validate()) { // フォームの検証 //フォームに入力された値を凍結する。 $objQF->freeze(); } $smarty = new Smarty; $smarty->template_dir = './templates'; $smarty->compile_dir = './templates_c'; $smarty->cache_dir = './cache'; // Render関連の設定 $objRenderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty); $objQF->accept($objRenderer); $smarty->assign('OBJFORM',$objRenderer->toArray()); // 表示 $smarty->display('index.tpl'); ?> </body> </html>
フォームの要素をセットするまでは、なんら変わりません。
Smartyには、フォームの要素情報を連想配列として渡すようにします。 そのためにHTML_QuickForm_Renderer_ArraySmartyオブジェクトを使用します。
accept関数でRendererとQuickFormが関連付けられます。 RendererオブジェクトのtoArray関数によりQuickFormの各要素が連想配列としてSmartyに渡されます。
Smarty側(テンプレート)は、通常の連想配列を扱うように処理を記述します。
どのような形で渡されるかを知りたい場合、var_dump($objRenderer->toArray())として確認してください。
Copyright 1997-2010 BBB All rights reserved.