出力をカスタマイズする

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

MySQLにユーザを追加する

2006/04/03 | MySQL

別に特殊なことをするわけではないけれど、毎回「どうやるんだっけ」と正確なコマンドを忘れてしまうので備忘録として・・・。
mysqlにrootでログインし、以下のコマンドを入力(一行目で既にDBが作成されている場合は省略)

$ CREATE DATABASE [DB名];
$ GRANT ALL ON [DB名].* TO [ユーザ名]@[ホスト名] IDENTIFIED BY “[パスワード]”;
$ FLUSH PRIVILEGES;

MySQLでは「create user」という操作がなく(?)、「grant」構文がそのまま「create user」の機能も併せ持っている。
元々PostgreSQLからはいった人間にとっては、やり方が違うので少し戸惑いがあります。

ライブドアのお天気情報がXMLで

2006/04/02 | XML

最近ライブドアからお天気情報がXMLで配信されるようになった。天気のXML化は本来気象庁がやるべきことのはずだけど、民間の気象関連業者の猛反対で実現していないらしい(なんでもHTMLで天気を配信することでももめたとか)。
自分の運営する某サイトで、勝手に気象庁データを取得して表示させる機能を作っていたけれど、それはあくまでHTMLを取得して解析して天気データを取り出すだけなので、HTMLがかわったりすると使えなくなってしまう。それに気象庁のサイトからデータを取ってきて表示させるのも、サーバに負荷もかかるし問題があるかもしれない。そういう諸事情もあってライブドアのお天気情報をハックすることにした(ライブドアではハックすることを推奨しているので)。
で、XMLデータを整理しないといけないのだが、一から作るのは面倒。で、いろいろ探し回ってXMLデータを整理して配列に格納してくれるライブラリを見つけた。ライブラリの入手先はここ。
http://keithdevens.com/software/phpxml#source
ただしこのライブラリ、そのまま使用するとNoticeレベルのエラーが出る。これはPHPのバージョンアップによるバグフィックスの結果の産物(別にエンバグしたわけでなく、元のプログラムに問題があるわけで・・・)。このバグを修正して使用すればOK。
最初のうちは試行錯誤していろいろプログラムを試していたけれど、このプログラムを使うと簡単。一瞬にしてデータを配列に格納してくれる。

ちなみにライブドアのお天気情報を整形して表示させるxoopsのモジュールを公開しているサイトがある。それはこっち(なんでも期間限定だそうな・・・)。
http://www.rc-net.jp/xoops/
ここではmagpierssを使用しているとのこと。使えるのはXMLデータの解析ではなく、お天気データと自作のお天気の画像アイコンを関連づける部分。アイコンをそのまま使うと問題があると思うのでアイコンは自作の必要がある。でもいくつあるかわからないお天気アイコンを闇雲に作るよりは、既存のコードに習って作るほうが「楽」ということで。

DOM XMLチュートリアル

2006/03/31 | XML

PHPでXMLを使える環境にはなったが、XMLのことをよく理解していないので、まだイマイチ使えない。ここに少しずつ備忘録としてメモしていくことにした。ただしPHP4の場合であり、PHP5になるとまた使い方が違うみたい。

<?php
//[1] $xmlがURLで与えられた場合
$dom=domxml_open_file($xml);
//[2] $xmlがファイルで与えられた場合
$dom=domxml_open_mem($xml);

//以下のメソッドは使い方まだわからない・・・
$root=$dom->document_element();
?>

上記[1][2]の部分で、Windows環境では[1]でローカルのファイル名を指定するとエラーになる(Linuxの場合は未確認)。

さて、とりあえず、ここからどう料理するかが問題・・・。

Windows版でDOM XML関数を利用する

基本的にサーバはLinux(RedHat系)を使用しているけれど、ローカルの開発環境(OS:WindowsXP PRO)にもapache+PHPをインストールし、どこでも開発できるようにはしてある。
XMLを使用したいと思い、ローカルな環境に設定を試みたがつまずいた。現状phpinfoを見たけれど、XML関連の表示はあるけれどDOMXML関連の表示が見当たらない。これは「きっとphp.iniのコメントアウトしてあるDLLを有効にすれば」と思い、該当部分を有効にしてapacheを再起動した。
しかし再起動時にエラーが表示され「c:¥php¥extensions¥php_domxml.dllが見つかりません」と怒られる。確かにc:¥php¥extensions¥php_domxml.dllは存在するし、同じディレクトリにあるphp_mbstring.dllは正常に読み込むことができている。
「どうして???」とウェブで調べてみて結局マニュアルに行き着いた。マニュアルによると「dllsディレクトリにあるiconv.dllをシステムディレクトリに入れるように」とある。このファイルをc:¥windowsにコピーし、apacheを再起動すると今度は問題なくapacheが起動した模様。
phpinfoを見るとDOMXMLの表示があった。一件落着。


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