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

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のソースを読んで修正するのもばかばかしいので「こういうものだ」という理解で進めることにした。勝手に関数名を変換してくれるなよ・・・。

pearで更新pingの送信

2006/04/15 | XML

ブログの更新ping受信プログラムは手元にあったけど、送信プログラムがなかった。いろいろなところを参考にして、pearで作ったプログラムをメモ。

<?php
 require_once(‘XML/RPC.php’);
 
 $blogTitle=’My Blog';
 $blogTopUrl=’http://blog.example.com';
 
 $pingServer=’ping.example.net';
 $pingPath=’/';
 
 $param=array(
  new XML_RPC_Value($blogTitle,’string’),
  new XML_RPC_Value($blogTopUrl,’string’)
 );
 $msg=new XML_RPC_Message(‘weblogUpdates.ping’,$param);
 $client=new XML_RPC_Client($pingPath,$pingServer,80);
 $response=$client->send($msg);
 if($response->faultCode()){
  exit(‘failed’);
 }else{
  exit(‘success’);
 }
?>

日付のフォーマット

2006/04/13 | MySQL

毎回「to_char」関数を使おうとしてエラーが出る(MySQLではそんな関数ありません)ので、メモしておく。

SELECT date_format(column0,’%Y-%m-%d’) FROM table0;

PEARのXML_RSSが超簡単

2006/04/13 | XML

XML関連を自分でいろいろ実装するのは難しそう(無論勉強する必要はあるけれど)。ということで、いろいろなところからライブラリをあさっているのだが、まずはやはりPEARということで「XML_RSS」。サンプルをメモっておく。

<?php
 require_once(‘XML/RSS.php’);
 $rss=& new XML_RSS(‘http://blog.tekmemo.net/index.rdf’);
 $rss->parse();
 foreach($rss->getItems() as $item){
  print_r($item);
 }
?>

PHPで設定した定数をSmartyで表示する

2006/04/12 | Smarty

PHPでdefine関数で設定した定数をSmarty側で表示させるためのSmarty関数(関数といっていいのかどうか・・・書式のほうがいいかもしれない)。

スクリプト側
<?php
define(‘MY_CONST’,’This is test’);
?>

テンプレート側
{$smarty.const.MY_CONST}


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