Last active
September 12, 2019 17:16
-
-
Save Tenderfeel/5f381178379dde2dbe60d42989bcd40d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
include "./PrevNext.php"; | |
include "./Numbers.php"; | |
//ダミーデータジェネレータ | |
function createDummy($length) { | |
$dummy = []; | |
foreach(array_fill(0, $length, null) as $k => $v) { | |
$dummy[] = 'Item ' . ($k + 1); | |
} | |
return $dummy; | |
} | |
$items = createDummy(54); //ダミーデータ | |
$count = count($items); // データの総数 | |
$perPage = 5; // 1ページあたりのデータ件数 | |
$totalPage = ceil($count / $perPage); // 最大ページ数 | |
$page = empty($_GET['page']) ? 1 : (int) $_GET['page']; // 現在のページ | |
print "<pre>page:" . $page . "\n"; | |
print "count:" . $count . "\n"; | |
print "perPage:". $perPage . "\n"; | |
print "totalPage:" . $totalPage . "</pre>"; | |
?> | |
<?php | |
// ページ番号でデータにフィルタかける | |
function filterData($page, $perPage, $data) { | |
return array_filter($data, function($i) use ($page, $perPage) { | |
return $i >= ($page - 1) * $perPage && $i < $page * $perPage; | |
}, ARRAY_FILTER_USE_KEY); | |
} | |
$filterData = filterData($page, $perPage, $items); | |
print '<ol>'; | |
foreach ($filterData as $data) { | |
print '<li>' . $data . '</li>'; | |
} | |
print '</ol>'; | |
?> | |
<div> | |
<?php paging($totalPage, $page); ?> | |
</div> | |
<div> | |
<?php paging2($totalPage, $page); ?> | |
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* ページ番号リンクの表示 | |
* @param int $totalPage データの最大件数 | |
* @param int $page 現在のページ番号 | |
* @param int $pageRange $pageから前後何件のページ番号を表示するか | |
*/ | |
function paging2($totalPage, $page = 1, $pageRange = 2){ | |
// ページ番号 | |
$page = (int) htmlspecialchars($page); | |
// 前ページと次ページの番号計算 | |
$prev = max($page - 1, 1); | |
$next = min($page + 1, $totalPage); | |
$nums = []; // ページ番号格納用 | |
$start = max($page - $pageRange, 2); // ページ番号始点 | |
$end = min($page + $pageRange, $totalPage - 1); // ページ番号終点 | |
if ($page === 1) { // 1ページ目の場合 | |
$end = $pageRange * 2; // 終点再計算 | |
} | |
// ページ番号格納 | |
for ($i = $start; $i <= $end; $i++) { | |
$nums[] = $i; | |
} | |
//最初のページへのリンク | |
if ($page > 1 && $page !== 1){ | |
print '<a href="?page=1" title="最初のページへ">« 最初へ</a>'; | |
} else { | |
print '<span>« 最初へ</span>'; | |
} | |
// 前のページへのリンク | |
if ($page > 1) { | |
print '<a href="?page=1" title="前のページへ">« 前へ</a>'; | |
} else { | |
print '<span>« 前へ</span>'; | |
} | |
// 最初のページ番号へのリンク | |
print '<a href="?page=1">1</a>'; | |
if ($start > $pageRange) print "..."; // ドットの表示 | |
//ページリンク表示ループ | |
foreach ($nums as $num) { | |
// 現在地 | |
if ($num === $page) { | |
print '<span class="current">' . $num . '</span>'; | |
} else { | |
// ページ番号リンク表示 | |
print '<a href="?page='. $num .'" class="num">' . $num . '</a>'; | |
} | |
} | |
if (($totalPage - 1) > $end ) print "..."; //ドットの表示 | |
//最後のページ番号へのリンク | |
if ($page < $totalPage) { | |
print '<a href="?page='. $totalPage .'">' . $totalPage . '</a>'; | |
} else { | |
print '<span>' . $totalPage . '</span>'; | |
} | |
// 次のページへのリンク | |
if ($page < $totalPage){ | |
print '<a href="?page='.$next.'">次へ »</a>'; | |
} else { | |
print '<span>次へ »</span>'; | |
} | |
//最後のページへのリンク | |
if ($page < $totalPage){ | |
print '<a href="?page=' . $totalPage . ' title="最後のページへへ">最後へ »</a>'; | |
} else { | |
print '<span>最後へ »</span>'; | |
} | |
// 確認用 | |
print "<pre>current:".$page."\n"; | |
print "next:".$next."\n"; | |
print "prev:".$prev."\n"; | |
print "start:".$start."\n"; | |
print "end:".$end."</pre>"; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* 前後ページへのリンク表示 | |
* @param int $totalPage 最大ページ数 | |
* @param int $page 現在のページ番号 | |
*/ | |
function paging($totalPage, $page = 1){ | |
$page = (int) htmlspecialchars($page); | |
$prev = max($page - 1, 1); // 前のページ番号 | |
$next = min($page + 1, $totalPage); // 次のページ番号 | |
if ($page != 1) { // 最初のページ以外で「前へ」を表示 | |
print '<a href="?page=' . $prev . '">« 前へ</a>'; | |
} | |
if ($page < $totalPage){ // 最後のページ以外で「次へ」を表示 | |
print '<a href="?page=' . $next . '">次へ »</a>'; | |
} | |
/*確認用*/ | |
print "<pre>current:".$page."\n"; | |
print "next:".$next."\n"; | |
print "prev:".$prev."</pre>"; | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment