PHPで10ページ毎のページネーション

2014年9月18日

後輩の指導ということで、10ページ毎のページネーションの作成を行いました。 動作としては、

1 2 3 4 5 6 7 8 9 10  >

という形に表示され、「>」をクリックした時に次の10ページグループが表示されます。

<  11 12 13 14 15 16 17 18 19 20  >

上記みたいな感じです。 さてソースコードは以下のとおりです。
※2014/10/27 修正

$page = isset($_GET['id']) ? $_GET['id'] : 1;
// データ数
$cnt = 275;
// 1ページの表示件数
$preview_item_num = 10;
 
// 最大ページ数
$max_page = ceil($cnt/$preview_item_num);
// 次グループの先頭ページ
$prove_group = (ceil( $page/10 )) * 10 + 1 ;
// 現在のページグループ
$group = (ceil( $page/10 ) - 1);
// 二桁の値
$select = $group * 10;
// 差分
$sabun = $cnt - 100 * $group;
// 前ページの先頭ページ
$prove = $prove_group - 20;
// 手抜きで差分が100以上だったら100にする
if($sabun > $preview_item_num * 10) $sabun = $preview_item_num * 10;
 
// 過剰ページにアクセスがあったら非表示
if( $page > 0 || $max_page >= $page )
{
// 10ページ以上だったら、前ページ移動のリンクを表示
if( $page > 10 ) echo sprintf('<a href="?id=%s">前へ</a>', $prove);
 
for( $s=1+$select; $s<= ceil($sabun/$preview_item_num)+$select; $s++? )
{
// 現在ページ以外のページにリンクを貼る
if( $page == $s ) echo ' '.$s;
else echo sprintf(' <a href="?id=%1$s">%1$s</a>', $s);
}
// 次のページグループが存在したら表示
 if( $max_page >= $prove_group? ) echo sprintf(' <a href="?id=%s">後ろへ</a>', $prove_group);
}

ざっくりですが、作ってみました。 凡庸性の無いところが気になりますが、 一応、後輩指導に使用したものです。 ・・・訂正箇所があったらこっそり教えてください(ボソ

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-PHP
-