忍者ブログ
バナヤンの忍者風呂
忍者ブログのカスタマイズ、各種WEBツールのテストなど試行錯誤の日々。 VMLによる地図の作成を研究していましたが、一時中断して、今はPHPを勉強しているところです。
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
お知らせ
この欄には管理人からのお知らせなどを掲載します。
[66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP ページ切替ナビゲーション($_GET)

PHPを勉強中です。

多量のデータを扱う場合、1画面に表示するデータ量を設定し、表示されていないデータへはページ移動でアクセスできるようにする必要があります。この場合、ページ切替のナビゲーションがページの中に埋め込まれます。

Googleの検索結果ページでも、10件以上の検索結果が出た場合には、下の方に「次へ」というナビゲーションのほかに、ページ切替のための数字のリンクが出現します。また、この「忍者ブログ」でもページ移動用のナビゲーションが表示されます。

今回は、この「ページ切替ナビゲーション」の表示部分を作ってみたいと思います。

前回の「PHP ユーザー定義関数(function)」で、ユーザー定義関数についておよその感触を掴めたので 、今回もユーザー定義関数で定義してみましょう。

アウトプットは明確です。こんな感じの表示。

[1] [2] [3] [4] [5] [6]



さて、インプットを何にしましょう。

ひとつには、ファイル名と1ページの最大表示数というのが考えられます。ファイル名がわかれば、その行数は調べられます。行数を1ページの最大表示で割れば、総ページ数の計算もできます。

しかしながら、パラメータ項目をファイル名に限定するとデータベースの検索結果を表示する場合には使用できません。ここはダイレクトに総ページ数をインプットすることにしましょう。そのほうが汎用性が高い関数になります。

処理は、ループ処理で1ページから最後のページまでの数字を出力することが基本になります。そして、それぞれの数字を<a>タグで囲んで、リンク属性を与えます。リンク先は「ページ自身($_SERVER[PHP_SELF])」とし、GETメソッドで、その数字を受け取るようにします。

次のサンプルは、上のように考えて作成した「ページ切替ナビゲーション」用関数とその使用例です。

テスト用として総ページ数は6、受け取った数字を「Page:」の部分に表示するだけにしています。

実際に使用する場合には、総ページ数を計算する部分も必要となるでしょうし、GETしたページ数で処理する部分は「echo "Page:".$page_num;」ではなく、データの表示に関する記述も必要となるでしょう。

[サンプルソース]ページ切替ナビゲーション(page_navi)

<?php
###ユーザー定義関数の登録
##ページナビ
function page_navi($lastpage){
for($i=1;$i<=$lastpage+1;$i++){
echo "<a href=$_SERVER[PHP_SELF]?page_num=".$i.">[".$i."]</a>";
}
}
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>page_navi()</title>
</head>
<body>

<?php>
///テスト用データ
$lastpage=5;
###ユーザー定義関数page_navi
page_navi($lastpage);
///テスト用出力
echo "<hr>";
$page_num=1;
if($_GET['page_num']){
$page_num=$_GET['page_num'];
}
echo "Page:".$page_num;
?>

</body>
</html>



上記のサンプルでは、$lastpageは"5"にして、表示は6ページまでとしています。これは、$lastpageにはレコード数を1ページの最大表示数で割った場合の「商」を代入するつもりだからです。表示とは別に内部的にはページは0ページから始まるとしたものです。
(例)
 レコード数----------57 (a)
 ページの最大表示数---10 (b)
 (a)÷(b)------------5 余り 7
 最後のページ---------6


どうしても$lastpageは"6"にしたい場合には、page_naviの「for($i=1;$i<=$lastpage+1;$i++)」の部分を、次のように書き換えます。

$i=1;$i<=$lastpage;$i++)


PR
QRコード
忍者ブログ [PR]
Copyright (C) 2006 banayan ALL RIGHTS RESERVED.