- ベストアンサー
ページ切り替え機能の改善方法
- 現在のページ切り替え機能の問題点として、32ページ目が終わりなのに33ページ目以降も表示されてしまうことがあります。
- PHP4のコードを使用しているため、改善の余地があります。
- 改善方法として、ページの表示数を10項目ずつに制限し、ページ数を正しく計算することが挙げられます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
どういう動きにしたいのでしょうか? 仮の動作としてベースを変えず、以下のコードで実行してみました。 <? $count = 320; $start_num = $_GET["start_num"]; $j=floor($count/10);//ページ数(10項目づつ表示) ?> <a href="./a.php?start_num=0">最初|</a> <? for($i=$start_num ;$i<=$start_num+9; $i++){ if($start_num<$j){ ?> <a href="./a.php?start_num=<?= $i ?>"><?=$i+1 ?>|</a> <? } } ?> <a href="./a.php?start_num=<?=$j ?>">最後</a> この場合、32ページ目を選択した時、$start_numは31です。 という事はf($start_num<$j)の条件に入ってしまいます。 そして33ページ目を選択した時は$start_numは32ですから、f($start_num<$j)は通りません。 というのが、現状の動作になってますね。 詳しい動きは分かりませんので、とにかく33ページ目というリンクを表示させたくないなら、 以下のコードでOKです。 <? $count = 321; $start_num = $_GET["start_num"]; $j=ceil($count /10) - $start_num;//ページ数(10項目づつ表示) ?> <a href="./a.php?start_num=0">最初|</a> <? for($i=$start_num ;$i<=$start_num+($j>9?9:$j - 1); $i++){ ?> <a href="./a.php?start_num=<?= $i ?>"><?=$i+1 ?>|</a> <? } ?> <a href="./a.php?start_num=<?=$j ?>">最後</a> そして、floor()じゃ、$countが321など、33ページ目の表示が必要な場合に対応できませんからceil()を利用します。
補足
ご回答いただき有難うございます。 ご推察いただいたとおりの動きを目指しています。 ご回答いただいた内容の中の for($i=$start_num ;$i<=$start_num+($j>9?9:$j - 1); $i++){ の $i<=$start_num+($j>9?9:$j - 1); の部分が理解できませんでした。もう一度教えていただけるでしょうか? 宜しくお願いいたします。