HTML_QuickForm の出力をカスタマイズ

HTML_QuickForm は確認画面用の出力まで自動でやってくれる。便利ですが「んん?確認画面用の Smarty テンプレファイルはいずこ?」と最初戸惑う。HTML_QuickForm の各クラスは、フォームの生成からチェック、確認画面の出力まで一つの変数で受けちゃうので、”確認画面専用のテンプレ”というのは必要ないんですな。ですので、カスタムクラスを自分で生成し出力部分を整形します。

*私の例はSmarty使用です。通常のスクリプト記述例は PHPのテクメモ さんなどへどうぞー。


■手順1 カスタムクラスを作成
自分でクラスを作ります。例えば私は、text を継承しつつ確認画面は画像で表示するようなエレメントを作成したいので、以下のような My_text_image というクラスを作り、My_text_image.php として新規ファイル保存しました。以下例。

<?php
require_once ‘HTML/QuickForm/text.php’;
class My_text_image extends HTML_QuickForm_text {
  function My_text_image( $name = null, $label = null, $attr = null ) {
    HTML_QuickForm_input::HTML_QuickForm_input( $name, $label, $attr );
    $this->_persistantFreeze = true;
    $this->setType( ‘text’ );
  }
  function getFrozenHtml() {
    $value = $this->getValue();
    return ($value = ‘<img src="’.$value.’" />’); . $this->_getPersistantData();
  }
}
?>

まあとりあえず・・getFrozenHtml の中の return をいじれば、出力変わるようですw 各クラスファイルをいろいろとりあえず中覗いてみてくださいな。

■手順2 新規部品として登録
new した HTML_QuickForm オブジェクトへ、先ほど作成したクラスを新規部品として以下のように登録してやる。

$○○ = new HTML_QuickForm();
$○○->registerElementType( ‘(新たに定義したい部品名)’, ‘(新規作成したファイル名)’, ‘(新たに定義したクラス名’ );

私の場合は以下。

$form = new HTML_QuickForm();
$form->registerElementType( ‘my_text_image’, ‘My_text_image.php’, ‘My_text_image’ );

以後は以下のように my_text_image と呼び出すことによって使用できます。

$form->addElement(‘my_text_image’,’(渡したい変数名)’,’(タイトル)’);

参考サイト
[PHP-users 30322] Re:Smarty+QuickFormにて確認画面での3桁区切りの方法について(MLog)
出力をカスタマイズする(PHPのテクメモ)
HTML_QuickForm利用の手引き

1件のコメント

  1. ピンバック: TMJ style

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です