最新記事
(06/29)
(06/04)
(06/03)
(05/30)
(05/28)
|
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
|
PHP ページ切替ナビ付テーブル(CSV)
PHPの勉強中です。
前回の「PHP ページ切替ナビゲーション($_GET)」では、ページ切替ナビゲーションの表示方法を考えました。今回はこれの応用です。1ページに表示するレコード数を限定して、表示されていないレコードへはページを切り替えて閲覧できるようにします。
データのサンプルには、都道府県コードのCSVファイルを使用します。
都道府県コードのCSVファイルについては、これまでも「PHP CSVファイルの読込み(fgetcsv) 」、「PHP ユーザー定義関数(function)」などで使用してきました。今回は、これらの記事で掲載したソースのサンプルも流用します。
まず、出来上がりのイメージを見ましょう。
[画面サンプル]ページ切替ナビ付テーブル ページ1
「ページ切替ナビゲーション」の数字をクリックするとページが移動します。
[画面サンプル]ページ切替ナビ付テーブル ページ2
前回の「PHP ページ切替ナビゲーション($_GET)」で作成した「ページ切替ナビゲーション」表示用の関数「function page_navi」は、PHPソースの中で、そのまま使用しています。この関数は、総ページ数を入力して使用する関数でした。
この総ページ数を求めるために第2の関数を利用しました。
ファイル名がわかれば、総レコード数が算出できます。
1ページに表示するレコード数を指定すれば、割り算の商で総ページが計算できます。
あとは何ページ目を表示するかという指示をすればいいわけですが、ここでは何番目のレコードから表示するかという設定にしました。「ページ切替ナビゲーション」でクリックしたページ番号で何番目のレコードから表示すればいいか計算できるからです。そうすることにより、CSVファイルのデータの読込みとHTMLテーブルの行の作成を同時に行うことができます。
このように考えて、第2の関数は「ファイル名、開始レコード番号、1行に表示するレコード数」の3つのパラメータを指定して実行することにしました。
この関数は、HTMLのテーブルを出力するとともに、戻り値として、ファイルの総レコード数を返します。返された総レコード数を1行に表示するレコード数で割って総ページ数を算出しています。
画面イメージの「全47件」と[5]という総ページ数は、こうして表示したものです。
[画面サンプル]ページ切替ナビ付テーブル ページ3
また、画面サンプルでは、1行おきにライトグリーンの背景色になっています。これは、tr要素のclass属性を1行おきに変えて、スタイルシートで背景色を設定しています。
[ソース」スタイルシート部分
[画面サンプル]ページ切替ナビ付テーブル ページ4
最後に全体のソースを掲載しましょう。
最後のページの画面サンプルも載せておきましょう。
[画面サンプル]ページ切替ナビ付テーブル ページ5
前回の「PHP ページ切替ナビゲーション($_GET)」では、ページ切替ナビゲーションの表示方法を考えました。今回はこれの応用です。1ページに表示するレコード数を限定して、表示されていないレコードへはページを切り替えて閲覧できるようにします。
データのサンプルには、都道府県コードのCSVファイルを使用します。
都道府県コードのCSVファイルについては、これまでも「PHP CSVファイルの読込み(fgetcsv) 」、「PHP ユーザー定義関数(function)」などで使用してきました。今回は、これらの記事で掲載したソースのサンプルも流用します。
まず、出来上がりのイメージを見ましょう。
[画面サンプル]ページ切替ナビ付テーブル ページ1
「ページ切替ナビゲーション」の数字をクリックするとページが移動します。
[画面サンプル]ページ切替ナビ付テーブル ページ2
前回の「PHP ページ切替ナビゲーション($_GET)」で作成した「ページ切替ナビゲーション」表示用の関数「function page_navi」は、PHPソースの中で、そのまま使用しています。この関数は、総ページ数を入力して使用する関数でした。
この総ページ数を求めるために第2の関数を利用しました。
ファイル名がわかれば、総レコード数が算出できます。
1ページに表示するレコード数を指定すれば、割り算の商で総ページが計算できます。
あとは何ページ目を表示するかという指示をすればいいわけですが、ここでは何番目のレコードから表示するかという設定にしました。「ページ切替ナビゲーション」でクリックしたページ番号で何番目のレコードから表示すればいいか計算できるからです。そうすることにより、CSVファイルのデータの読込みとHTMLテーブルの行の作成を同時に行うことができます。
このように考えて、第2の関数は「ファイル名、開始レコード番号、1行に表示するレコード数」の3つのパラメータを指定して実行することにしました。
###ユーザー定義関数fgetcsv2table_page
$row_num=fgetcsv2table_page($filename,$row_from,$pagerows);
echo "<hr>";
echo "全".$row_num."件<br>";
echo "<hr>";
$page=$row_num/$pagerows;
この関数は、HTMLのテーブルを出力するとともに、戻り値として、ファイルの総レコード数を返します。返された総レコード数を1行に表示するレコード数で割って総ページ数を算出しています。
画面イメージの「全47件」と[5]という総ページ数は、こうして表示したものです。
[画面サンプル]ページ切替ナビ付テーブル ページ3
また、画面サンプルでは、1行おきにライトグリーンの背景色になっています。これは、tr要素のclass属性を1行おきに変えて、スタイルシートで背景色を設定しています。
[ソース」スタイルシート部分
<style type='text/css'>
<!--
.csv {border-collapse:collapse;}
.csv td {border:#030 solid 1px;}
.row_class0{background-color:#cfc;}
.row_class1{background-color:#fff;}
.field0{text-align:right;}
-->
</style>
[画面サンプル]ページ切替ナビ付テーブル ページ4
最後に全体のソースを掲載しましょう。
<?php
###ユーザー定義関数の登録
##ページナビ
function page_navi($lastpage){
for($i=1;$i<=$lastpage+1;$i++){
echo "<a href=$_SERVER[PHP_SELF]?page_num=".$i.">[".$i."]</a>";
}
}
?>
<?php
###ユーザー定義関数の登録
function fgetcsv2table_page($filename,$row_from,$pagerows){
$fp = fopen($filename,"r");
if(!($fp)){
die("ファイルをオープンできません。");
}else{
$row_num=0;
$row_to=$row_from + $pagerows;
echo "<table class='csv'>\r\n";
while($row=fgetcsv($fp,1000,",")){
$page=$rownum/$pagerows;
$row_class=$row_num % 2;
if($row_num>=$row_from&&$row_num<$row_to){
echo"<tr class='row_class".$row_class."'>";
$fields=count($row);
for($i=0;$i<$fields;$i++){
echo "<td class='field".$i."'>".$row[$i]."</td>";
}
echo "</tr>\r\n";
}
$row_num++;
}
echo "</table>";
fclose($fp);
}
return $row_num;
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>fgetcsv2table_page()</title>
<style type='text/css'>
<!--
.csv {border-collapse:collapse;}
.csv td {border:#030 solid 1px;}
.row_class0{background-color:#cfc;}
.row_class1{background-color:#fff;}
.field0{text-align:right;}
-->
</style>
</head>
<body>
<?php
//テスト用データ
$filename="pref.csv";
$pagerows=10;
$row_from=0;
if($_GET['page_num']){
$row_from=($_GET['page_num']-1)*$pagerows;
}
###ユーザー定義関数fgetcsv2table_page
$row_num=fgetcsv2table_page($filename,$row_from,$pagerows);
echo "<hr>";
echo "全".$row_num."件<br>";
echo "<hr>";
$page=$row_num/$pagerows;
###ユーザー定義関数page_navi
page_navi($page);
if($_GET['page_num']){
$page_num=$_GET['page_num'];
$row_from=$pagerows * $page_num;
}
?>
</body>
</html>
最後のページの画面サンプルも載せておきましょう。
[画面サンプル]ページ切替ナビ付テーブル ページ5
PR