最新記事
(06/29)
(06/04)
(06/03)
(05/30)
(05/28)
|
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
|
PHP ページ切替ナビゲーション($_GET)
PHPを勉強中です。
多量のデータを扱う場合、1画面に表示するデータ量を設定し、表示されていないデータへはページ移動でアクセスできるようにする必要があります。この場合、ページ切替のナビゲーションがページの中に埋め込まれます。
Googleの検索結果ページでも、10件以上の検索結果が出た場合には、下の方に「次へ」というナビゲーションのほかに、ページ切替のための数字のリンクが出現します。また、この「忍者ブログ」でもページ移動用のナビゲーションが表示されます。
今回は、この「ページ切替ナビゲーション」の表示部分を作ってみたいと思います。
前回の「PHP ユーザー定義関数(function)」で、ユーザー定義関数についておよその感触を掴めたので 、今回もユーザー定義関数で定義してみましょう。
アウトプットは明確です。こんな感じの表示。
さて、インプットを何にしましょう。
ひとつには、ファイル名と1ページの最大表示数というのが考えられます。ファイル名がわかれば、その行数は調べられます。行数を1ページの最大表示で割れば、総ページ数の計算もできます。
しかしながら、パラメータ項目をファイル名に限定するとデータベースの検索結果を表示する場合には使用できません。ここはダイレクトに総ページ数をインプットすることにしましょう。そのほうが汎用性が高い関数になります。
処理は、ループ処理で1ページから最後のページまでの数字を出力することが基本になります。そして、それぞれの数字を<a>タグで囲んで、リンク属性を与えます。リンク先は「ページ自身($_SERVER[PHP_SELF])」とし、GETメソッドで、その数字を受け取るようにします。
次のサンプルは、上のように考えて作成した「ページ切替ナビゲーション」用関数とその使用例です。
テスト用として総ページ数は6、受け取った数字を「Page:」の部分に表示するだけにしています。
実際に使用する場合には、総ページ数を計算する部分も必要となるでしょうし、GETしたページ数で処理する部分は「echo "Page:".$page_num;」ではなく、データの表示に関する記述も必要となるでしょう。
[サンプルソース]ページ切替ナビゲーション(page_navi)
上記のサンプルでは、$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++)」の部分を、次のように書き換えます。
多量のデータを扱う場合、1画面に表示するデータ量を設定し、表示されていないデータへはページ移動でアクセスできるようにする必要があります。この場合、ページ切替のナビゲーションがページの中に埋め込まれます。
Googleの検索結果ページでも、10件以上の検索結果が出た場合には、下の方に「次へ」というナビゲーションのほかに、ページ切替のための数字のリンクが出現します。また、この「忍者ブログ」でもページ移動用のナビゲーションが表示されます。
今回は、この「ページ切替ナビゲーション」の表示部分を作ってみたいと思います。
前回の「PHP ユーザー定義関数(function)」で、ユーザー定義関数についておよその感触を掴めたので 、今回もユーザー定義関数で定義してみましょう。
アウトプットは明確です。こんな感じの表示。
さて、インプットを何にしましょう。
ひとつには、ファイル名と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