新しく質問する

<前 次> のようなリンクを見やすく表示

役に立った:4件
  • 質問者:Intel_404
  • 投稿日時:2006/04/24 00:58
  • 困り度:すぐに回答が欲しいです

データベース(MySQL)にデータを保存し、そのデータを見やすく表示するスクリプトを作成しているのですが、データの量が多いため以下のように10レコードづつ表示しています。

$page = ceil($CountRe/10);
for ($i=1;$i<= $page;$i++){
echo "<a href=\"./db_show.php?number=".$i."\">".$i."</a>";
}

しかしこの場合だと100レコードあれば <a href="?id=1">1</a>から<a href="?id=10">10</a>までのリンクが表示されます。これが1000レコードの場合、100までなのでこれをどうにか短くして表示したいと思っています。

簡単にはGoogleの検索のように 例えば8ページ目を表示している場合、 下5件、上5件までを表示したいので 3 4 5 6 7 8 9 10 11 12 13 のような感じで、レコード数が 10000でもリンクは短く表示できるようにするにはどうすればいいのでしょうか?

Pearなどの外部ファイルを使用しない方法でお願いいたします。

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:4件)
  • 参考になった:1件

No.3ベストアンサー20pt

  • 回答者:yambejp
  • 回答日時:2006/04/24 14:21

いくつかの仕様要件があります。
現在のページを$idとして、最終カウント数を
$countRe、ページャーの戻り表示を$page_footer
としますと、$idや$countReの値によって、
$page_footerは可変になるかと思います。
以下4例ほど挙げていますので、ご確認ください。

<?PHP
$countRe=30;
pager($_GET["id"],$countRe);

$countRe=65;
pager($_GET["id"],$countRe);

$countRe=100;
pager($_GET["id"],$countRe);

$countRe=1000;
pager($_GET["id"],$countRe);

function pager($id,$countRe){
if($id=="") $id=1;

$maxPage=ceil($countRe/10);
if($maxPage==1 or $maxPage<$id) return false;

if($id>6){
$startPage=$id-5;
$startMore="<a href=\"$PHP_SELF?id=".($startPage -1)."\">&lt; PREV</a>";
}else{
$startPage=1;
}

if($id+5<$maxPage){
$endPage=$id+5;
$endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT &gt;</a>";
}else{
 $endPage=$maxPage;
}
$page_footer="";
for($i=$startPage;$i<=$endPage;$i++){
$page_footer.=" ".(($id==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?id=$i\">$i</a>");
}
$page_footer=$startMore.$page_footer.$endMore;
print $page_footer."<br>";
}
?>

通報する

この回答へのお礼

大変参考になりました。ありがとうございました。

  • 参考になった:0件

No.2ベストアンサー10pt

  • 回答者:php504
  • 回答日時:2006/04/24 09:45

最小値が1で最大値が$CountReなら

if ($number - 5 > 0) {
$start = $number - 5;
}
else {
$start = 1;
}
if ( $number + 5 < $CountRe) {
$end = $number + 5;
}
else {
$end = $CountRe;
}
for ($i = $start; $i <= $end; $i++)

ですね

通報する

  • 参考になった:0件
  • 回答者:fire--
  • 回答日時:2006/04/24 01:12

あまり難しく考えなければ良いのではないでしょうか。

現在表示しているページが$numberに入るとして、
for ($i=$number-5;$i<= $number+5;$i++){
としたらどうでしょう。

実際は、$number-5が1以上になるようにしたり
しなければいけないですが、if文ひとつ書けば
できますね。最大のほうも同じですね。

通報する

この回答への補足

回答ありがとうございます。

ご回答いただいた if文ひとつ を教えていただけないでしょうか?

お願いします。

  
このQ&Aは役に立ちましたか?(役に立った:4件)

このページのトップへ