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