- ベストアンサー
PHPで効率的なページネーションの方法を探る
- PHPを使用してよくあるページネーションに効率的な方法を探しています。自分で試してみましたが、分かりづらくなってしまいました。知恵をお持ちの方、ご教授ください。
- 現在のページより前後5ページを出力しますが、1ページ目の場合は後ろに10ページを表示し、最終ページの場合は前に10ページを表示します。常に現在のページも含めて11ページを出力します。
- また、ページの移動ボタンと数字の間に最後のページへのリンクを作成します。PHP4を使用しています。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あ、1ページレコード数と リンクの数を決めるのが一致してしまってました;; <? $nowpage=$_REQUEST[page]; $records=180; //総レコード数 $view_per_page=20; //1ページに表示するレコード[奇数] $howmanylinks=9; //表示するリンクの数、自身を含む 12345678→9[奇数] $sidepage=($howmanylinks-1)/2; $maxpage=ceil($records/$view_per_page); if($nowpage>$sidepage and $maxpage-$sidepage > $nowpage){ $startpage=$nowpage-$sidepage; $finishpage=$nowpage+$sidepage;} elseif($nowpage<$sidepage){ $startpage=1; $finishpage=$view_per_page; } elseif($maxpage-$sidepage <= $nowpage){ $startpage=$maxpage-2*$sidepage; $finishpage=$maxpage; } for($i=$startpage;$i<=$finishpage and $i<=$maxpage;$i++){ ($nowpage==$i)? print("$i ") : print("<a href=\"$_SERVER[PHP_SELF]?page=$i\">$i</A> "); } ?>
その他の回答 (1)
- widoww
- ベストアンサー率20% (33/159)
よくしりませんけど・・・ PEARにそういうクラスがあるみたい??謎 http://search.yahoo.co.jp/search?p=pear+%A5%DA%A1%BC%A5%B8%A5%F3%A5%B0&fr=top_v2&tid=top_v2&ei=euc-jp&search.x=1 効率がいいかはしりませんけど 以下で一応動くかと・・・ <? $nowpage=$_REQUEST[page]; $records=180; //総レコード数 $view_per_page=21; //1ページに表示するレコード[奇数] $maxpage=ceil($records/$view_per_page); $sidepage=($view_per_page-1)/2; if($nowpage>$sidepage and $maxpage-$sidepage > $nowpage){ $startpage=$nowpage-$sidepage; $finishpage=$nowpage+$sidepage;} elseif($nowpage<$sidepage){ $startpage=1; $finishpage=$view_per_page; } elseif($maxpage-$sidepage <= $nowpage){ $startpage=$maxpage-2*$sidepage; $finishpage=$maxpage; } for($i=$startpage;$i<=$finishpage and $i<=$maxpage;$i++){ ($nowpage==$i)? print("$i ") : print("<a href=\"$_SERVER[PHP_SELF]?page=$i\">$i</A> "); } ?>
補足
ご回答ありがとうございます!! 早速実装してみたところ、かなりいい感じなんですが、特定条件の場合ループに入れないようです。 例として $nowpage=4; $records=310; //総レコード数 $view_per_page=10; //1ページに表示するレコード[奇数] $howmanylinks=9; //表示するリンクの数 の場合if文に当てはまらないのか、ページネーションが出力されなくなってしまいます。 式が自分にとって非常に難しく、最後のelseすら書き足せない感じです、、、申し訳ありません。