radioボタンの名前

2006/08/21 | HTML_QuickForm

QuickFormのradioボタンのname属性で、つまらない試行錯誤をしてしまった。
radioやcheckboxのようなフォームの要素を作成するときは以下のように、
$item=array();
$item[]=& HTML_QuickForm->createElement(‘radio’,’name1′);
$item[]=& HTML_QuickForm->createElement(‘radio’,’name2′);
$myForm->addGroup($item,’nameG’);
要素をそれぞれ作成して、addGroupするのがわかりやすい。
しかし上記のような名前属性をつけるとプログラム上はグループ化されているが、HTMLになったときに、それぞれのラジオボタンは連動して動作してくれない。HTMLのソースを見ればわかるが、2つのラジオボタンのname属性が異なる値になっているからだ。ラジオボタンが連動するためにはname属性に同じものが指定されていることが原則だ。こういうときは以下のように指定する。
$item=array();
$item[]=& HTML_QuickForm->createElement(‘radio’,NULL);
$item[]=& HTML_QuickForm->createElement(‘radio’,NULL);
$myForm->addGroup($item,’nameG’);
ラジオボタンの各項目で名前属性に相当する部分にNULLを指定すればよい。

PHPでHTTPのクライアントになる

2006/06/30 | HTTP_Request

他サイトにあるデータを取得する場合、PHPでは、設定さえ有効になっていれば以下の方法でコンテンツを取得できる。
<?php
$url=’http://www.example.com';
$content=file_get_contents($url);
?>

しかしこれで取得できるのは’コンテンツのみ’だ。ヘッダとかを取得できるわけではない。PHPをつかって素でかくとfsockopenとなるわけだが、それはかなり手間がかかる。で便利なライブラリがPEARにある。HTTP_Requestだ。
こんなふうにすると簡単にヘッダも取得できる。
<?php
require_once(‘HTTP/Request.php’);
$url=’http://www.example.com';
$req=& new HTTP_Request($url);
$req->sendRequest();
//dateヘッダを取得する場合
$myHeader=$req->getResponseHeader(‘date’);
?>

とっても簡単。

後付でエラーを追加する

2006/04/22 | HTML_QuickForm

QuickFormでの入力チェックは、基本的にaddRule等で入力規則を追加し、validate()でチェックをかけるのが通常の処理。しかし稀に入力規則のエラー以外でエラーを発生させたいときがある。そんなときは以下の関数を使用する。

$myForm->setElementError(‘エラー要素名’,’エラーメッセージ’);

入力規則を設定するときに

2006/04/18 | HTML_QuickForm

QuickFormでは入力規則を設定する際に、3つの方法がある。いつもよくわからなくなるのでメモ。

○addRule()
単品のエレメントに対して、規則を設定する。

○addGroupRule()
グループ化されたエレメントの個々の要素に対して、規則を設定する。それぞれの要素に対して共通の規則を設定したり、別々の規則を設定したりできる。

○addFomeRule()
フォーム内の複数の要素に対して、規則を設定する(例えば要素Aと要素Bが関連付けられている場合とか)。

別クラスで設定したルールを適用する際に・・・

2006/04/16 | HTML_QuickForm

ここのところ開発は全てmojavi + QuickForm + Smarty。単独で稼動させるスクリプトは素で書くけれど、「ウェブサイト構築」という名目で作る場合はこの組み合わせ。今まで(自作のライブラリ)よりも作業効率が5倍くらいよくなってるような気がする。

で、お題の件。基本的にmojaviでQuickFormを使う場合は専用のライブラリ(class)を作ってそれを継承し、利用している。フォームで使用するルール(入力規則)はだいたい同じようなものをサイト内で使いまわすけれど、ベースとなるクラスファイルを編集するのは美しくないような気がして、別ファイルでクラス化し、そちらを編集するようにしたかったのだが、そこで問題が発生。別ファイルで定義したルールがなぜか使用できない・・・。

独自ルールを追加するのは前にも書いたregisterRuleでできるはずなのに・・・。
$myForm->registerRule(‘ルール名’,’callback’,’使用する関数名’,’クラス名’);
で確かに登録したし、getRegisteredRules()で確かにルールが登録されていることも確認できるのに・・・。実はすごい落とし穴があった。
ルールの関数はこんなふうにつくった。
–(1)
function _customRule($values,$option){
//ルール詳細
}

ルールの登録はこんなふうに一括でできるように繰り返し処理を利用した。
–(2)
$funcArray=get_class_methods(‘QuickFormRules’);
foreach($funcArray as $funcName){
 $ruleName=substr($funcName,1);
 $myForm->registerRule($ruleName,’function’,$funcName,’QuickFormRules’);
}

登録したルールをこんなふうに呼び出した。
–(3)
$myForm->addRule(‘formItem’,’Error’,’customRule’);

これで「うまくいくはず!」と思っていたけどダメダメ。いろいろ思案してみてわかったことは・・・get_class_methods関数に問題がありました。これって「関数名を全て小文字で返す」らしい。だから希望として、ルールの名前は「customRule」としたかったのに「customrule」という名前で登録されているということ。ということで(3)をこんなふうに書き換えたら動いた。
–(3)’
$myForm->addRule(‘formItem’,’Error’,’customrule’);

「r」を大文字から小文字に変えただけ。PHPのソースを読んで修正するのもばかばかしいので「こういうものだ」という理解で進めることにした。勝手に関数名を変換してくれるなよ・・・。


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