データ数が多くなってくると必然的に検索結果の表示件数も増えます。1ページあたりの表示件数があまり多すぎるのも考えものですね。1ページあたりのデータ数を10件に区切って表示する方法を考えてみましょう。
例としてすべてのデータを1ページ10件ずつに区切って表示するプログラム(allitem.php)を作ってみましょう。1ページ目
プログラムのご使用による損害は直接、間接に関わらず一切の責任をもちません。ご使用は自己責任でお願いします。
僕が使っているサーバーとドメイン管理のレジストラーです。
§1ページを10件表示に制限する
データ数が多くなってくると必然的に検索結果の表示件数も増えます。
1ページあたりの表示件数があまり多すぎるのも考えものですね。
1ページあたりのデータ数を10件に区切って表示する方法を考えてみましょう。
ページはクエリで制御する
例としてすべてのデータを1ページ10件ずつに区切って表示するプログラム(allitem.php)を作ってみましょう。
1ページ目
<?php
$Data=file("item.csv");
for($i=0;$i<10;$i++){ //解説(1)
$line=explode("‚ "‚ $Data[$i]);
$ID=$line[0];
$Title=strip_tags($line[3]);
print"<li><a href='item.php?id={$ID}'>{$Title}</a></li>";
}
?>
</ol>
解説(1)
これは簡単ですね。
繰り返しの制御を0から10未満にすれば良いだけです。
2ページ目はこの部分が
for($i=10;$i<20;$i++){ 〜 }
となります。
さて、これらを自動化するにはfor文の制御を計算式に直さなければいけません。
ページを区別するにはクエリを使えば良いですね。
1ページ目(p=0)2ページ目(p=1)・・・
とすると
for($i=$P*10;$i<$P*10+10;$i++){ 〜 }
次にナビゲーションリンクを自動生成する方法を考えてみましょう。
//解説(2)
if($P>0){
$Prev=$P-1;
$PrevPage="<a href='allitem.php?p={$Prev}'>前の10件</a>";
}
//解説(3)
$Size=sizeof($Data);
if($Size/10-1>$P){
$Next=$P+1;
$NextPage="<a href='allitem.php?p={$Next}'>次の10件</a>";
}
?>
解説(2)
「前のページ」へ戻るナビゲーションを作りましょう。
基本的にpの値を一つ減らせば一つ前のページへのリンクになります。
ただし、1ページ目(p=0)より前はありえませんので
if($P>0)
と条件を設定しておきます。
解説(3)
「次のページ」へのナビゲーションは少し複雑になります。
最後のページが特定できないとエンドレスにリンクが続く悲しいサイトになってしまいますね(笑)
例えばデータ数が100なら10ページ目(p=9)が最後ですね。
「データ数÷10-1」未満ならリンクを生成するようにします。
$PrevPageと$NextPageを任意の場所に貼り付けてナビゲーションの出来上がりです。
プログラムのご使用による損害は直接、間接に関わらず一切の責任をもちません。ご使用は自己責任でお願いします。