KANTENNA.COM

Solarized

HOME > WEBプログラム覚書 > PEAR::Pagerを使ってみた 其1

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

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

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

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

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

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

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

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

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

PHP
  1.  <?php
  2.  class Rss_Display{
  3.  
  4.   var $all_num;
  5.   var $title = array();
  6.   var $link = array();
  7.   var $description = array();
  8.   var $author = array();
  9.   var $category = array();
  10.   var $pubDate = array();
  11.  
  12.  
  13.   function Rss_Display()
  14.   {
  15.   // PEAR RSS.php読み込み
  16.   require_once("XML/RSS.php");
  17.  
  18.   // RSSファイルへのURIをコンストラクタの引数に渡す
  19.   $rss = new XML_RSS("http://www.kantenna.com/info/index.xml");
  20.  
  21.   // RSSファイルをパースする
  22.   $rss->parse();
  23.  
  24.   /**
  25.   * getItemsメソッドを使用して全item要素を2次元配列で取得
  26.   */
  27.  
  28.   $rss = $rss->getItems();
  29.   $this->all_num = sizeof($rss);
  30.   $i=0;
  31.   for($i=0; $i<$this->all_num; $i++){
  32.  
  33.   /**
  34.   * 要素ごとの処理
  35.   * @title タイトル
  36.   * @link リンク先
  37.   * @description 本文
  38.   * @author 著者
  39.   * @category カテゴリー
  40.   * @pubDate 日付
  41.   */
  42.   $this->title[$i] = mb_convert_encoding(strip_tags($rss[$i]["title"]), $code);
  43.   $this->link[$i] = htmlspecialchars($rss[$i]["link"]);
  44.   $this->description[$i] = mb_convert_encoding(strip_tags($rss[$i]["description"]), $code);
  45.   $this->author[$i] = mb_convert_encoding(strip_tags($rss[$i]["author"]), $code);
  46.   $this->category[$i] = mb_convert_encoding(strip_tags($rss[$i]["category"]), $code);
  47.   $this->pubDate[$i] = date("Y/m/d", strtotime($rss[$i]["pubdate"]));
  48.  
  49.   }
  50.   }
  51.  }
  52.  
  53.  require_once("Pager/Pager.php");
  54.  
  55.  // RSSフィードを取得
  56.  $rss = new Rss_Display();
  57.  
  58.  // 1ページの表示件数
  59.  $perPage = 5;
  60.  
  61.  // Pagerに渡すパラメータの設定
  62.  $param = array(
  63.   "perPage" => $perPage, //1ページのデータ数
  64.   "totalItems" => $rss->all_num, //総データ件数
  65.   );
  66.  
  67.  // オブジェクト生成
  68.  $pager = Pager::factory($param);
  69.  
  70.  // ナビゲーション取得
  71.  $navi = $pager->getLinks();
  72.  
  73.  //現在ページのID
  74.  $pID = $pager->getCurrentPageID();
  75.  
  76.  //開始インデックス
  77.  $index = ($pID - 1) * $perPage;
  78.  
  79.  
  80.  for($i=$index; $i<$index+$perPage; $i++){
  81.  echo "<dl>";
  82.  print <<< RSS
  83.  <dt class="pub">{$rss->pubDate[$i]}</dt>
  84.  <dt><a href="{$rss->link[$i]}">{$rss->title[$i]}</a></dt>
  85.  <dd>{$rss->description[$i]}</dd>
  86.  RSS;
  87.  echo "</dl>";
  88.  }
  89.  
  90.  // ナビ表示
  91.  print($navi["all"]);
  92.  ?>

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

実行結果

2012/02/08
[Ubuntu11.10]Winows XPユーザーがUbuntuを使ってみて
Windows XPとUbuntuのデュアルブート環境にしてみておもったこと。
2012/01/25
[Ubuntu11.10]Ubuntuのインストール後の設定
インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。 すばらしいですね。
2012/01/24
[Ubuntu11.10]Windows XPとUbuntuのデュアルブート環境
いろいろあってUbuntuをインストールすることに。
2012/01/23
MinGW+Mintty+Git
MinGW+Mintty+Gitをやろうとして失敗に終わった。このエントリーには収穫できるものはありません。
2012/01/21
[PHP]共有サーバーユーザーのためのPEARインストール方法
共有サーバーでは自由にPEARのパッケージがインストールできないので、 プロジェクトローカルに設置することになりますが、以前httpベースのものを使ってみたんですけど、 やたら重くて使い物にならなかったので、僕は普通にFTPでアップするようにしてます。 ってことでプロジェクトローカルへのPEARのインストール方法。
2 3 Next >> 

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

独習PHP 第2版
作者:山田 祥寛 | 価格:¥ 3,360

トラックバック(1)

2009年12月21日 01:58

PEAR::Calenderを利用して特定の日付からn日間表示WEBプログラム覚書

PEAR::Calenderを利用して特定の日付からn日間表示続きを読む

コメント

コメントする
Name
Email Address
URL
TIME LINE
2012
02.08

[Ubuntu11.10]Winows XPユーザーがUbuntuを使ってみて

Windows XPとUbuntuのデュアルブート環境にしてみておもったこと。

2012
02.03

[jQuery]closest()とparents()

今から16年前Netscapeブラウザのソースコードの公開方法の会議の中で、初めてオープンソースという言葉が使われた今日、 みなさんいかがお過ごしでしょうか。

今回の投稿はそれとは関係のないjQueryのparents()とclosest()が 似てたので何が違うのか試した時のメモです。

2012
02.01

[jQuery Mobile]初期化イベントメモ

jQuery Mobileは読み込まれてから

mobileinit -> pagebeforecreate -> pagecreate -> pageinit

の順番でイベントが発生する。

2012
02.01

[WordPress]管理画面のフッタのフィルタとアクション。

時間も時間なので、あまり使用頻度の高くない微妙なネタを。

会員制サイトなどで不特定多数の人にログインさせる場合、フッタのバージョン情報は隠しておきたかったり、 こじゃれたメッセージを表示したいときとか使うアクションとフィルタ。

2012
01.28

[WordPress] ブログの情報を取得する方法とノーキャッシュ疑惑

ブログのget_bloginfo()で取れないデータが必要な場合に使うもの。

2012
01.26

[jQuery Mobile]ダイアログ

jQuery Mobileにおけるダイアログの扱いはウインドウではなくページ。 なので通常のページと同様に扱える。ダイアログウインドウを出す。じゃなくダイアログページに遷移する。的な。

2012
01.25

[Ubuntu11.10]Ubuntuのインストール後の設定

インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。

すばらしいですね。

2012
01.24
2012
01.23

MinGW+Mintty+Git

MinGW+Mintty+Gitをやろうとして失敗に終わった。このエントリーには収穫できるものはありません。