■目次
1、初めに
2、ページ番号ロジック
3、コード例
■初めに
検索サイトを作った時にページ番号の表示ロジックに手間取ったので載せておこうと
思いました。参考にしていただけたら幸いです。
(一例なので改善点・よりよいコードがあれば教えてください)
■べーじ番号のロジック
ページが1の時は5までの数字を出し、間に「・・・」を表示させ最後の番号を表示させる
ページ番号が5以上の時に始めのページ・前2つのページ番号・後ろ2つ・最後の番号を表示
ページが(最後のページ ー 3)の場合は初めのページ・最後までのページと前のページを表示
■コード例(jsp)
aタグのhrefにはリンク抜き状態のコードです。
変数名や定数名などの命名はセンスがないので良い名前があれば教えてください。
<%
//ページ数・現在ページの変数宣言
int currentPage;
int lastPageNum;
//変数代入
currentPage = 5;
lastPageNum = 9;
//定数宣言
final int FIRST_PAGE = 1;
final int FIRST_HALF_CHECK = 5;
final int LAST_HALF_CHECK = 4;
final int BEFORE_AND_AFTER = 2;
%>
<section>
<div class="pageLeft">
<%if(currentPage != FIRST_PAGE){ %>
<a href="">前のページへ</a>
<%} %>
</div>
<div class="pageCenter">
<%if(currentPage >= FIRST_HALF_CHECK){ %>
<a href="">1</a>
…
<%} %>
<%if(currentPage < FIRST_HALF_CHECK){ %>
<%for(int i = 1; i <= FIRST_HALF_CHECK; i++){ %>
<%if(i <= lastPageNum){ %>
//aタグを入れるか入れないかの分岐(現在ページにaタグは入れない)
<%if(i == currentPage){ %>
<span><%=i %></span>
<%}else{ %>
<a href=""><%=i %></a>
<%} %>
<%} %>
<%} %>
<%}else if(lastPageNum - currentPage < LAST_HALF_CHECK){ %>
<%for(int i = lastPageNum - LAST_HALF_CHECK; i <= lastPageNum; i++){ %>
<%if(i > 0){ %>
//aタグを入れるか入れないかの分岐(現在ページにaタグは入れない)
<%if(i == currentPage){ %>
<span><%=i %></span>
<%}else{ %>
<a href=""><%=i %></a>
<%} %>
<%} %>
<%} %>
<%}else{ %>
<%for(int i = currentPage - BEFORE_AND_AFTER; i <= currentPage + BEFORE_AND_AFTER; i++){ %>
//aタグを入れるか入れないかの分岐(現在ページにaタグは入れない)
<%if(i == currentPage){ %>
<span><%=i %></span>
<%}else{ %>
<a href=""><%=i %></a>
<%} %>
<%} %>
<%} %>
<%if(lastPageNum - currentPage >= LAST_HALF_CHECK){ %>
…<a href=""><%=lastPageNum %></a>
<%} %>
</div>
<div class="pageRight">
<%if(currentPage != lastPageNum){ %>
<a href="">次のページへ</a>
<%} %>
</div>
</section>
■まとめ
検索サイトでページナンバーロジックに1回詰まったので書いてみました。
もっといい方法や改善点等あると思いますので、その際は教えていただけると幸いです。