人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

検索結果のページングの番号の省略を作成したいのですが、どうすればよろしいでしょうか(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
%>


●質問者: winona1029
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● TransFreeBSD
ベストアンサー
<%
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
%>

winona1029さんのコメント
連絡遅くなり申し訳ありません。 早速の回答有り難うございます。 記述をもとに動作したところ、ページの表示が1...と表示してしまいます。

TransFreeBSDさんのコメント
すみません。なんでだろ。 各変数(iPage, iPageCount, iRangeOfPageNum, iBeginOfPageNum, iEndOfPageNum)の値はどうなってます? #予想では1, 1, 1, 1, 2の予定だけど……

winona1029さんのコメント
今、職場を離れて確認でしませんが、明日確認してみます。 iRangeofpageNum=2だと、次ページ押した時に、4ページにきた時に、...4...と表示します。2ページ、3ページだと2...と表示し、最終ページよりも2つ手前で次ページが表示されなくなります。iRangeofpageNum=0だと最期まで行きます。

winona1029さんのコメント
値は、最後のEndif End subの前で実施しています。 各変数(iPage, iPageCount, iRangeOfPageNum, iBeginOfPageNum, iEndOfPageNum)の値は、1,9,2,1,3になっています。 iPagecoutは現在9ページあるので9になってます。

TransFreeBSDさんのコメント
iPageが1と2の時、iEndOfPageNumが小さくなる問題があったので、最初の方のコメントに☆印のある3行を追加しました。 しかし、その修正前でもFor文に使ってるiBeginOfPageNumとiEndOfPageNumが1と3なので1〜3は表示されるはずなんですが……For文の所間違ってませんよね? ループが回らない原因が分かりません。 その他の文法もあってるんじゃ無いかと思うのですが。 #VBScriptはほとんど書いたこと無いのですが代入とFor, If文程度しかないので…… 念のためPHPでテストしてみたんですけど、それだと思ったとおりの出力になってます。 参考までに…… http://ideone.com/F9pEgU

winona1029さんのコメント
TransFreeBSDさん、ありがとうございました。 希望通りの動作をしました。感謝・感激です。 原因は、ページ番号を表示する際の、<% else %>分の記載漏れが原因でした。 本当にありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ