LoginSignup
14
12

More than 5 years have passed since last update.

[PHP]Google的ページャーのロジック

Last updated at Posted at 2015-11-19

スクラッチでページャーを実装する必要があり、いちおうそのロジック(パターン)を残しておこうと思う。
なおこちらに掲載しているロジックは、本来のものを簡素化させたものです。
簡素化させてから動作確認していないので動かないかもしれないですが、そこはご了承ください。

あと、よりスマートな方法があればご教授いただけると幸いです。

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">|&lt; 先頭へ</a></li>

<?php if ($page_now > 1): ?>
<li class="prev"><a href="/page/<?= ($page_now - 1) ?>">&lt; 前へ</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) ?>">次へ &gt;</a></li>
<?php endif; ?>

<li class="last"><a href="/page/<?= ($page_max) ?>">最後へ &gt;|</a></li>
</ul>
</div>
<!--| pager END |-->
14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12