PHPでページングクラス作った

2011年10月26日

ちょっと前に作ったサイトにDBでの各種情報入力とその投入・編集・削除の管理画面を作ったんだけど、作ってテストしてってやってるうちにページング機能が必要なことに気づいてしまったんです。遅いよね、気づくの。そんなうっかり経緯でページングを実装する必要が出てきました。

まぁ PEAR あたりにページャーくらいあるだろうと思ったんで特に問題はないかなぁと思ってたんですが、せっかく最近色々と覚えてきてるし、ここらでいっちょクラスファイルも作れるような人になってみるか!と思い立ってクラスの勉強をしながらページングクラスを自作しました。ついでに、せっかく作ったので公開してみようかと思い今に至ります。

初めて作ったし、そのくせちゃんと考えたり計算したりせずに割と行き当たりばったりで作っちゃったのでバグも意味不明なところもいっぱいあると思うんですが、もし使ってくれると嬉しいです。そしてバグとか意味不明なところがあったら教えてくれると小躍りします。

主な機能

特にありません、多分普通のページングです。他のページャーライブラリとか一切見てないので他との比較も出来ません。元々僕がほしかっただけなのでそんなもんで十分なのです。

でも一応やれることを書きますね

  • ページ数は最大何ページ表示させるか決められる
  • 「最初へ」とか「次へ」とかの文言を決められる
  • テーマが3種類から選べる(手抜きですが)
  • 角丸に出来る(手抜きですが)

使い方

サンプルページも作っておきました。下の使い方と合わせてみてもらえれば大丈夫かと思います。

1.ページングクラスファイルを読み込みます

include("pager.class.php");

2.全データの行数と1ページに表示したい数とページ数のGETパラメータ名を引数にクラスのインスタンスを作成

//データの行数取得
$all_data = sizeof(file("data.csv"));
//1ページに表示したい数
$order_vol = 5;
//ページングインスタンス作成
$i_pager = new pager($all_data, $order_vol, "p");

3.今のページだと何行目から何行目までを取得すれば良いかを取得

//何行目から何行目を表示するか
//今のページ数(GETパラメータの数値)だと何行目から何行目を表示すべきか
$first_num = $i_pager->first_num;
$last_num = $i_pager->last_num;
//sql だったら limit を使うと思うので、$order_vol を使えば良いかと思います

4.データを表示(適宜変更してくださいね)

for($i=$first_num; $i <= $last_num; $i++){
?>
  <tr>
    <td><?php print($query[$i]['0']);?></td>
    <td><?php print($query[$i]['1']);?></td>
    <td><?php print($query[$i]['2']);?></td>
  </tr>
<?php } ?>

5.ページャーを表示

$i_pager->print_list($param);

こんな感じです。

ダウンロード

イマドキのWeb系エンジニアなら「GitHubにあげたよ」とかさらっと気の利いたことを言うんでしょうが、僕はGiHubの使い方を知りません。Gitは一度勉強したからある程度(初歩的なこと)は理解しているんですが、イマイチGitHub使う理由が見当たらないのでまぁ良いかなぁと思ってます。だれか「GitHubイイヨ!」って方がいたら色々教えてくれませんか。

そんなちょっとオールドタイプな僕はファイル一式をZIPで固めて自分が借りてるこのサーバにアップしたいと思います。

参考にさせてもらったサイトさん

クラスについて教えてもらいました
クラスの基礎 | PHP Labo

ループについてちゃんと理解せねば!と思ってちゃんと読み直しました
ループ/PHP入門

実はしりませんでした。@ をつけるだけでエラー表示させないように出来るんですね
配列のundefined indexがうざい – はらぐろブログラマン

CSVの扱いってホントは全然やったことがないんです。行数とか簡単に取れるんですね
phpを勉強してみる csvファイルの行数、列数の取得

本当にCSVの取得については何度かいても覚えません(頻度が低いからでしょうけど)
csvファイルを配列に格納するphp関数 “fgetcsv” – Weblogy

他にこんな事も書いてます

FBでコメント