2007年05月30日 12:15

PEAR::Pagerを使ってみた 其1

| http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/360

大量のデータを複数ページに分割して表示したい場合に便利だというPagerを使ってみた。

ページのナビはパラメータを設定してやればいいだけなので簡単だがデータ表示の部分は自分で作らないといけない。

パラメータを説明しているサイトは結構ありましたが、表示部分のサンプルがまったく無く初心者の自分は結構苦労しました。

肝は開始インデックスの求め方。普通の人なら簡単にわかるのでしょうが自分は大苦戦・・・

苦労の末、やたら長くわかりづらいコードを書いてしまいましたが、PEAR入門 PHP標準ライブラリを極める! にとても素晴らしい開始インデックスの求め方が書いてありました。

開始インデックス=(ページID-1)*表示件数

上記を使って書き直したらかなりすっきりしました。

お隣の情報備忘録のRSSを5件ずつ表示するサンプル


class Rss_Display{
    
    var $all_num;
    var $title = array();
    var $link = array();
    var $description = array();
    var $author = array();
    var $category = array();
    var $pubDate = array();
    
            
    function Rss_Display()
    {    
        // PEAR RSS.php読み込み
        require_once("XML/RSS.php");
        
        // RSSファイルへのURIをコンストラクタの引数に渡す
        $rss = new XML_RSS("http://www.kantenna.com/info/index.xml");

        // RSSファイルをパースする
        $rss->parse();

        /**
        * getItemsメソッドを使用して全item要素を2次元配列で取得
        */
    
        $rss = $rss->getItems();
        $this->all_num = sizeof($rss);
        $i=0;
        for($i=0; $i<$this->all_num; $i++){
            
            /**
             * 要素ごとの処理
             * @title タイトル
             * @link リンク先
             * @description 本文
             * @author 著者
             * @category カテゴリー
             * @pubDate 日付
             */
            $this->title[$i] = mb_convert_encoding(strip_tags($rss[$i]["title"]), $code);
            $this->link[$i] = htmlspecialchars($rss[$i]["link"]);
            $this->description[$i] = mb_convert_encoding(strip_tags($rss[$i]["description"]), $code);
            $this->author[$i] = mb_convert_encoding(strip_tags($rss[$i]["author"]), $code);
            $this->category[$i] = mb_convert_encoding(strip_tags($rss[$i]["category"]), $code);
            $this->pubDate[$i] = date("Y/m/d", strtotime($rss[$i]["pubdate"]));

        }
    }
}

require_once("Pager/Pager.php");

// RSSフィードを取得
$rss = new Rss_Display();

// 1ページの表示件数
$perPage = 5;

// Pagerに渡すパラメータの設定
$param = array(
                "perPage" => $perPage, //1ページのデータ数
                "totalItems" => $rss->all_num, //総データ件数
                );

// オブジェクト生成
$pager = Pager::factory($param);

// ナビゲーション取得
$navi = $pager->getLinks();

//現在ページのID
$pID = $pager->getCurrentPageID();

//開始インデックス
$index = ($pID - 1) * $perPage;


for($i=$index; $i<$index+$perPage; $i++){
echo "<dl>";
print <<< RSS
<dt class="pub">{$rss->pubDate[$i]}</dt>
<dt><a href="{$rss->link[$i]}">{$rss->title[$i]}</a></dt>
<dd>{$rss->description[$i]}</dd>
RSS;
echo "</dl>";
}

// ナビ表示
print($navi["all"]);

※Rss_Display()はRSSフィードを要素ごとに配列で取得する自作クラス

実行結果

2010/03/02
うーん残念。PHPによるデザインパターン入門が絶版に。
PHP関連本で1、2を争う良書だと思ってる「PHPによるデザインパターン入門 」が絶版になったらしい。うーん残念。 ただ校正前の原稿を公開してくださるようなので買いっぱぐれた人は是非。
2010/02/24
koheさんの写真ブログ oShashin
なぜかわからないけどこのブログ好きだ。
2010/02/19
EC-CUBE インストールメモ
PHPのEC用のCMSはEC-CUBEで決まりなのかと思ってたら、 Live Commerceなるものが。
2010/02/16
ActionScript3.0 コメントとかコーディング規約とか
メソッドの引数や返り値って型を記述するのでコメントどうなるのかと思って調べてみたら引数や返り値の型は書かないみたい。そりゃそうか。
2010/02/13
[PHP]これはPHP初心者は絶対読むべき!!・・・だとおもう、極上のリソース
少々弱気なのは僕も初心レベルなので絶対とか言える立場じゃないためw でも絶対役に立つと思う。
2 3 Next >> 

パラメータは他にも多数あるので、今度どんな値が返ってくるか試してみようかと思います。

PHPフレームワーク Zend Framework入門

著者 : 藤野 真吾 / 金額 : ¥ 2,919

PEAR::Pagerを使ってみた 其1タグ:

トラックバック

  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/360
[WEBプログラム覚書]2009年12月21日 01:58
PEAR::Calenderを利用して特定の日付からn日間表示
PEAR::Calenderを利用して特定の日付からn日間表示
コメント (0)
コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





この情報を登録しますか?


先月アクセスが多かったページ