出力をカスタマイズする

2006/04/04 | HTML_QuickForm

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)する際に、上記で定義した[新たな部品名]で呼び出せばカスタム表記した部品を表示することができる。

checkboxの値指定

2006/02/23 | HTML_QuickForm

HTML_QuickFormで普通にcheckboxを作成すると、そのvalue値は全て「1」になる。これを回避するための(value値を指定する)スクリプトは以下の通り($resultがPearDBのクエリの結果の場合)。

$i=0;
$tmpArray=array();
while($row=$result->fetchRow()){
 $tmpCheckBox=& HTML_QuickForm::createElement(‘checkbox’);
 $tmpCheckBox->setName($i);
 $tmpCheckBox->setText($row[‘name’]);
 $tmpCheckBox->updateAttributes(array(‘value’=>$row[‘id’]));
 $tmpArray[]=$tmpCheckBox;
 $i++;
}
$myForm->addGroup($tmpArray,’formCheckBox’,’CheckBox’,’ ‘);

これでvalue値を任意のものにできる。

Read the rest of this entry »

PCの判別

2006/01/16 | Net_UserAgent

PC用の判別は以下のサンプルを使用する。とりあえずブラウザ種別とOSを取得するサンプルを掲示。

require_once(‘Net/UserAgent/Detect.php’);
echo Net_UserAgent_Detect::getOSString();
echo Net_UserAgent_Detect::getBrowserString();

これでOS種別とブラウザ名を取得できる。

携帯電話の判別

2006/01/16 | Net_UserAgent

Pearを使った携帯電話の判別や各種情報の取得に以下のサンプルを使用。

require_once(‘Net/UserAgent/Mobile.php’);
$mobile =& Net_UserAgent_Mobile::factory();
//bool $mobile->isAirHPhone();
//bool $mobile->isDoCoMo();
//bool $mobile->isEZweb();
//bool $mobile->isJPhone();
//bool $mobile->isWAP1();
//bool $mobile->isWAP2();
//bool $mobile->isNonMobile();

echo $mobile->getName(); //DoCoMo等を返す

各キャリアで特徴的に取得できるのはgetName()メソッドだけかも。実質、現状では使い物になるかどうかわからない。

passwordエレメントのデータ持ち回り

2006/01/06 | HTML_QuickForm

QuickFormで「入力-確認-処理」の一連の流れを簡単に作ることができるけど、passwordについてはhiddenで持ち回りすることは標準でできない。以下のようにプロパティを設定してあげる必要がある。
—————————————————
$myForm=new HTML_QuickForm(‘myForm’,’post’);
$myPassword=& $myForm->addElement(‘password’,userPswd,’パスワード’);
$myPassword->setPersistantFreeze(true);


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net