ページング処理をPEARで

2007/01/08 | その他PEAR全般

データベースからデータを取得する際、データの件数が多い場合はページング処理をして出力するのは当然だ。今まではこの記述を全て自前で書いていた(「データ取得時のページング処理」を使っていた)。
もちろんPEARの中に、Pagerというページング処理をおこなうためのクラスがあることは知っていた。しかしつい最近まで「Pagerを使う場合は事前にデータをすべてDBからフェッチしておかないといけないから、大量データのあるテーブルの場合は役に立たない」と考えていた(ということで使わなかった)。
実は心の中で「こんな当たり前の処理、絶対に簡単にできるためのツールがあるはず」と思っていたけど、探したり、調べたりするのが面倒だったから、結局自前で書いていた。
今日一大決心(というほどのことではないけれど)をして探してみた!。そしたらあっさり見つかった。PEARのPagerをラッパーしたクラスとのことだった。
Pager_Wrapper.php

これを使うとなんと超簡単。あっという間にページング処理をやってくれる。
こんな感じ。

//Pagerを使う際のオプションを設定(他にもいろいろあり)
$pagerOptions=array();
$pagerOptions[‘mode’]=’Sliding';
//1ページに10レコードずつ
$pagerOptions[‘perPage’]=10;
//自動で生成するリンクの数(「次ページを入れて前後に3つずつ」ということ)
$pagerOptions[‘delta’]=3;
//表示したいページ番号
$pagerOptions[‘currentPage’]=1;

$sql=”SELECT shohin_id,shohin_name FROM tbl_shohin ORDER BY shohin_id;”;
$pagedData=Pager_Wrapper_MDB2($myDB,$sql,$pagerOptions);

print_r($pagedData);

たったこれだけ。これだけで必要なデータは全て$pagedDataに配列で格納されてくる。すご〜い。
これを作った人に感謝。この紹介記事を書いた人に感謝。検索エンジンに感謝。探す勇気を出した自分に感謝。

QuickFormもか・・・PEAR管理ツールのバグ

2007/01/03 | その他PEAR全般

DatabaseだけじゃなくてHTML系も結局だめ。
QuickFormがインストールできないよ(これも検索してインストール)。

他にもあるかもしれない。
これは今後サポートしないということか?。理由がわからん。
どうなってるよ、PEAR・・・。とほほ。

ウェブ管理ツールのバグ?(Databaseが表示されない)

2007/01/02 | その他PEAR全般

今日、新しくサイトを構築するのに、PEARのインストールを実行した。
最近はもっぱら、サイトごとにPEAR用ディレクトリを作って、そちらでパッケージの管理をしている。手順は以下のとおり。

○ウェブからアクセスできるとことにディレクトリを作成(パーミッション777)
○http://go-pear.orgにアクセスして、表示された内容をコピペしてファイルを作成(go-pear.php)。
○作成したファイルを作ったディレクトリにアップして、ウェブからアクセス。
○画面にしたがってPEARインストール完了。

こういう手順でいいのだが、ウェブ管理ツールからデータベースのインストールができない。というかカテゴリ「Database」が見つからない。これが見つからないと、必要なものがインストールできないのに・・・。
いろいろ探し回ったけど、結局検索で「mdb2」とするしかなかった(これで必要なパッケージは表示されたのでインストール完了)。
これは絶対バグなような気がする。早くなおることを祈る。

メールのデコード(その2)

2006/10/23 | その他PEAR全般

結論から言うとメールのデコードは上手くできた。
デコードに際して2つのPEARファイルが必要になることは既に書いたが、.qmailからプログラムを呼び出したり、なんだかんだの関係で、それぞれを個々にメインファイルから呼び出すことにした(mimeDecode.phpのrequire_once文をコメントアウトした)。
以下が実際に記述したプログラム。
———————————————————–
<?php
 require_once(‘./lib/PEAR.php’);
 require_once(‘./lib/mimeDecode.php’);

 //標準入力からメール本体を抽出
 $source=”;
 $stdin=@fopen("php://stdin","r");
 while(!feof($stdin)){
  $source.=fgets($stdin,4096);
 }
 fclose($stdin);
 
 //メールをパースする
 $decoder = new Mail_mimeDecode($source);
 $params[‘include_bodies’] = true; //ボディを解析する
 $params[‘decode_bodies’] = true; //ボディをコード変換する
 $params[‘decode_headers’] = true; //ヘッダをコード変換する
 $structure = $decoder->decode($params);
?>

ここで$structureは構造体(オブジェクト)として返される(といってもまぁ配列のようにも扱えるわけだが)。このオブジェクトからは以下の値をもっている。

$structure->headers
 ヘッダ情報(配列で格納されている)
$structure->ctype_primary
 メールのコンテントタイプ(スラッシュより前)
$structure->ctype_secondary
 メールのコンテントタイプ(スラッシュより後)
$structure->body
 メールのコンテントタイプがmultipartでない場合のメール本体
$structure->parts
 メールのコンテントタイプがmultipartな場合のメール本体(構造体)

outlookなんかだとmultipart×multipartみたいな書式のメールになることがあるので、メール本体の処理を忠実におこなおうとすると再帰的処理をかけてやる必要がある。今回はoutlook無視なので、そこまではやらないつもりだけど。

MDB2のquoteの例

2006/10/14 | その他PEAR全般

mdb2のquoteメソッドの記述例をメモ。
$mdb2->quote($value,’integer’);
$mdb2->quote($value,’text’);
$mdb2->quote($value,’timestamp’);
$mdb2->quote($value,’boolean’);
$mdb2->quote($value,’blob’);

他にもあるみたい。


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