プロが教えるわが家の防犯対策術!

データベース(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などの外部ファイルを使用しない方法でお願いいたします。

A 回答 (3件)

いくつかの仕様要件があります。


現在のページを$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>";
}
?>
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/24 02:11

最小値が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++)

ですね
    • good
    • 0

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



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

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

この回答への補足

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

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

お願いします。

補足日時:2006/04/24 01:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!