出力をカスタマイズする
QuickFormは非常に強力なフォーム作成ライブラリだが、出力するHTMLのカスタマイズは基本的に<input>タグ(もしくは<label>タグなど)の内側だけだ。しかしラジオボタンやチェックボックスなどはテーブル形式に表示するなど美しく整形して表示したいなどのリクエストも多いはず。
これはPHPのMLで話題になった表示をカスタマイズする方法のメモ。やり方としては既存のフォーム部品用classを拡張したカスタムクラスを生成し、そこでtoHTML関数を上書き、新たなフォーム用部品classとして新規登録する手順を踏むことで実現可能だ。以下サンプル(checkboxとラベルを<span>タグで囲む)。
<?php
require_once(‘HTML/QuickForm/checkbox.php’);
class myCheckbox extends HTML_QuickForm_checkbox {
function toHtml()
{
if (0 == strlen($this->_text)) {
$label = ”;
} elseif ($this->_flagFrozen) {
$label = $this->_text;
} else {
$label = ‘<label for="’ . $this->getAttribute(‘id’) . ‘">’ . $this->_text . ‘</label>';
}
return ‘<span>’ . HTML_QuickForm_input::toHtml() . $label . ‘</span>';
} //end func toHtml
}
?>
上記のようなカスタムクラスを作成し、生成したQuickFormオブジェクトで新規部品として以下のように登録する。
$myForm=& new HTML_QuickForm(‘myForm’,’post’);
$myForm->registerElementType([新たな部品名],[作成したファイルへのパス],[定義したクラス名]);
これで部品を追加(addElement)する際に、上記で定義した[新たな部品名]で呼び出せばカスタム表記した部品を表示することができる。