スクラッチでページャーを実装する必要があり、いちおうそのロジック(パターン)を残しておこうと思う。
なおこちらに掲載しているロジックは、本来のものを簡素化させたものです。
簡素化させてから動作確認していないので動かないかもしれないですが、そこはご了承ください。
あと、よりスマートな方法があればご教授いただけると幸いです。
pager.php
<?php
$page_num = 10; // 表示ページ数
$page_end = $page_num - 1; // 末ベージ数計算用
$page_pos = 5; // 該当ページ表示位置
$view_cnt = 50; // 1ページの表示件数
$page_now; // 現在のページ番号
$count; // データ総数
$page_max = ceil($count / $view_cnt); // 最大ページ数
$start = 0; // 開始ページ
$end = 0; // 末ページ
// 開始ページの計算
if ($page_max <= $page_num) {
$start = 1;
} else {
$start = (($page_now - $page_pos) > 1)? $page_now - $page_pos : 1;
// 終了ページが最大超になる場合
if ($start + $page_end > $page_max) {
$start = $page_max - $page_end;
}
}
// 末ページの計算
$end = ($page_max <= $page_num)? $page_max : $start + $page_end;
?>
<!--| pager BGN |-->
<div class="pager">
<ul class="inline-list">
<li class="first"><a href="/page/1">|< 先頭へ</a></li>
<?php if ($page_now > 1): ?>
<li class="prev"><a href="/page/<?= ($page_now - 1) ?>">< 前へ</a></li>
<?php endif; ?>
<?php for($start; $start <= $end; $start++): ?>
<li <?= ($start == $page_now)? 'class="current"' : '' ?>><a href="/page/<?= ($start) ?>"><?= $start ?></a></li>
<?php endfor; ?>
<?php if ($page_max > $page_now): ?>
<li class="next"><a href="/page/<?= ($page_now + 1) ?>">次へ ></a></li>
<?php endif; ?>
<li class="last"><a href="/page/<?= ($page_max) ?>">最後へ >|</a></li>
</ul>
</div>
<!--| pager END |-->