サイトを作成する際に、必ずと言っていいほど必要となるのがページング機能。
ページネイションやページャーやら、呼び方は様々ですが。
試行錯誤の結果、今はこんな感じのを使いまわしています。
条件分岐を分かりやすくするのって、難しいですよね。
久しぶりに触ると、条件分岐を理解するのに時間がかかります。
function paging($total, $page=1, $limit = 100, $url = "")
{
//クラス名
$CLASS_PAGING='paging';
$CLASS_NEXT='pagingNext';
$CLASS_PREV='pagingPrev';
$CLASS_BUTTON='pagingButton';
$CLASS_BUTTON_SELECT='pagingSelect';
$CLASS_BUTTON_DOTS='paginDots';
//PREVの要素
$CLASS_PREV_ITEM='PREV';
//NEXTの要素
$CLASS_NEXT_ITEM='NEXT';
//表示するボタンの数、3以上
$BUTTON_CNT=8;
$totalPage = (int) ceil($total / $limit);
if ($totalPage == 1) {
return;
}
if ($page>$totalPage) {
$page=1;
}
$queryUrl = (strpos($url, "?")===false) ? "$url?page=" : "$url&page=";
echo "<div class='$CLASS_PAGING'>";
if ($page>1) {
echo "<a class='$CLASS_PREV' href='".(preg_replace("/[?&]page=1$/", "", $queryUrl.($page-1)))."'>$CLASS_PREV_ITEM</a>";
} else {
echo "<span class='$CLASS_PREV'></span>";
}
echo "<div class=''>";
for ($i=1,$echo_cnt=0;$i<=$totalPage;$i++) {
if (
($totalPage<=$BUTTON_CNT)|
($i==1&&$BUTTON_CNT>7)|
($i==2&&$BUTTON_CNT>7)|
($i==$totalPage&&$BUTTON_CNT>7)|
($i==$totalPage-1&&$BUTTON_CNT>7)|
($totalPage>$BUTTON_CNT&&(($echo_cnt<$BUTTON_CNT-2&&$BUTTON_CNT>7)|($echo_cnt<$BUTTON_CNT&&$BUTTON_CNT<=7))&&($i>=$page-1&&$i<=$page+$BUTTON_CNT-2))|
($i>$totalPage-($BUTTON_CNT-$echo_cnt))
) {
if (
($i==2&&$page>4&&$BUTTON_CNT<$totalPage&&$BUTTON_CNT>7)|
($i==$totalPage-1&&$page<$totalPage-($BUTTON_CNT-2)&&$BUTTON_CNT<$totalPage&&$BUTTON_CNT>7)
) {
echo "<span class='$CLASS_BUTTON_DOTS'>…</span>";
} else {
echo "<a class='$CLASS_BUTTON ".(($i==$page)?$CLASS_BUTTON_SELECT:"")."' href='".(preg_replace("/[?&]page=1$/", "", $queryUrl.$i))."'>$i</a>";
}
$echo_cnt++;
}
}
echo "</div>";
if ($page<$totalPage) {
echo "<a class='$CLASS_NEXT' href='". $queryUrl.($page+1)."'>$CLASS_NEXT_ITEM</a>";
} else {
echo "<span class='$CLASS_NEXT'></span>";
}
echo "</div>";
}
見本①

見本②
CSSサンプル
.paging {
width: 100%;
display: flex;
white-space: nowrap;
text-align: center;
}
.paging div {
width: 100%;
display: flex;
justify-content: center;
}
.paging a {
padding: 6px 12px;
background-color: #333;
cursor: pointer;
color: white;
text-decoration: none;
}
.paging a:hover {
background-color: gray;
}
.paging span {
padding: 6px 12px;
}
.pagingNext {
box-sizing: border-box;
width: 70px;
min-width: 70px;
}
.pagingPrev {
box-sizing: border-box;
width: 70px;
min-width: 70px;
}
.pagingButton {
margin: 0 3px;
}
.pagingSelect {
background-color: gray !important;
}
.paginDots {}
コメント
I truly appreciate this post. I have been looking everywhere for this! Thank goodness I found it on Bing. You have made my day! Thank you again