検索結果のページングの番号の省略を作成したいのですが、どうすればよろしいでしょうか(ASP)?


表示↓
1 2 3 4 5 ...次へ という風に最大5ページまで表示し残りは「...」と作成したいのですがご教示よろしくお願いします。

Dim iPageSize '1ページに表示する項目数
Dim iPage 'ページ番号
Dim iRecordCount '検索結果の全行数
<%
'*** 1ページに表示する商品数を取得する
iPageSize = CInt(Request.QueryString("pageSize"))
If iPageSize = 0 Then
iPageSize = 100
End If

'*** 表示するページ値を取得する
iPage = CInt(Request.QueryString("page"))
If iPage = 0 Then
iPage = 1
End If
Session("iPage") = iPage
%>

~省略~
<% If iPage > 1 Then %>
<A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>?page=<%= iPage - 1 %>">前へ</A> 
<% End If %>
<% If iPage < iPageCount Then %>
<A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>?page=<%= iPage + 1 %>">次へ</A>
<% End If %>
<% '*** ページ番号を表示する
For i = 1 To iPageCount
If i = iPage Then %>
<FONT SIZE="+1"><A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>?page=<%= i %>"><I><%= i %></I></A></FONT>&nbsp;
<%
Else %>

<FONT SIZE="+1"><A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>?page=<%= i %>"><%= i %></A></FONT>&nbsp;
<%
End If
Next
End Sub
%>

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/11/13 20:02:23

ベストアンサー

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

<%
Dim iRangeOfPageNum 	'表示するページ番号の範囲(現ページの前後数、×2+1が表示数)
Dim iBeginOfPageNum
Dim iEndOfPageNum
iRangeOfPageNum = 2

~省略~

iEndOfPageNum = iPage + iRangeOfPageNum		'現在ページから指定(2)ページ後のページ番号までの表示とする
If iEndOfPageNum <= iRangeOfPageNum*2 Then	'☆最低でもiRangeOfPageNum*2 +1ページを表示するように修正する
  iEndOfPageNum = iRangeOfPageNum*2 +1;		'☆
End If						'☆
If iEndOfPageNum > iPageCount Then			'最終ページを過ぎていたら修正する
  iEndOfPageNum = iPageCount
End If
iBeginOfPageNum = iEndOfPageNum - iRangeOfPageNum*2	'表示する最後のページ番号の指定(2)ページ前のさらに指定(2)ページ前(*2)からの表示とする
If iBeginOfPageNum > 1 Then				'1ページ目より後ろからなら省略文字を表示する
%>
...
<% Else							'1ページ目より後ろでない(前である)ならば修正する
  iBeginOfPageNum = 1
End If

'*** ページ番号を表示する
For i = iBeginOfPageNum To iEndOfPageNum
If i = iPage Then %>
<FONT SIZE="+1"><A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>?page=<%= i %>"><I><%= i %></I></A></FONT>&nbsp;
<% Else %>
<FONT SIZE="+1"><A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>?page=<%= i %>"><%= i %></A></FONT>&nbsp;
<% End If
Next

'表示したページ番号よりまだ後ろがあるなら省略文字を表示する
If iEndOfPageNum < iPageCount Then %>
...
<% End If
End Sub
%>
他4件のコメントを見る
id:TransFreeBSD

iPageが1と2の時、iEndOfPageNumが小さくなる問題があったので、最初の方のコメントに☆印のある3行を追加しました。

しかし、その修正前でもFor文に使ってるiBeginOfPageNumとiEndOfPageNumが1と3なので1~3は表示されるはずなんですが……For文の所間違ってませんよね?
ループが回らない原因が分かりません。
その他の文法もあってるんじゃ無いかと思うのですが。
#VBScriptはほとんど書いたこと無いのですが代入とFor, If文程度しかないので……

念のためPHPでテストしてみたんですけど、それだと思ったとおりの出力になってます。
参考までに……
http://ideone.com/F9pEgU

2014/11/12 22:13:10
id:winona1029

TransFreeBSDさん、ありがとうございました。
希望通りの動作をしました。感謝・感激です。

原因は、ページ番号を表示する際の、<% else %>分の記載漏れが原因でした。
本当にありがとうございました。

2014/11/13 20:02:05

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません