便利なHTML_QuickForm。出力コードをカスタマイズする時。

PHPの標準ライブラリ「PEAR」のHTML_QuickFormとSmartyの連携、かなり慣れてきました!

・・で、HTML_QuickFormは通常(?)、checkboxやradioはGroup化して出力するので、「項目ごとになんかでくくる」ってことが出来ません。
色々createElementの属性を調べてみても出来なさそう・・と思ったら、既存クラスの上書きで対応可能なのですね!
PHPのテクメモ」さんにて紹介されていました。

<?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([新たな部品名],[作成したファイルへのパス],[定義したクラス名]);

確認画面でのチェックボックスは[ ](チェック無し),[x](チェックあり)の形で表現されていることがイヤだったので、上記を参考にして、チェックありの項目だけを表示する自作チェックボックスクラスを作ってみました。

<?php
require_once(‘HTML/QuickForm/checkbox.php’);
class myCheckbox extends HTML_QuickForm_checkbox{
function toHtml(){
if ($this->_flagFrozen) {
return HTML_QuickForm_checkbox::toHtml() . $label . “</div>\n”;
} else {
return HTML_QuickForm_checkbox::toHtml() . $label . “<br />\n”;
}
} //end func toHtml

function getFrozenHtml(){
return ($this->getChecked()? ‘<div>’: ‘<div style=”display:none;”>’) .
$this->_getPersistantData();
}
}
?>

うん♪こちらほうが良い良い。

1 comment

コメントを残す