ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHP チュートリアルでよく使用されるページング クラスの概要

PHP_PHP チュートリアルでよく使用されるページング クラスの概要

WBOY
リリース: 2016-07-20 11:11:30
オリジナル
981 人が閲覧しました

ページネーションは、多数の結果を表示するための最良の方法です。次のコードを使用すると、開発者は複数のページに大量のデータを表示できます。インターネットでは、一般にページングは​​検索結果やすべての情報の閲覧に使用されます

php 基本ページング

コードは次のとおりです コードをコピー

// データベース接続情報
$conn = mysql_connect('localhost','dbusername','dbpass') またはtrigger_error("SQL", E_USER_ERROR);
$db = mysql_select_db('dbname',$conn) またはtrigger_error("SQL", E_USER_ERROR);

// テーブル内の行数を調べます
$sql = "SELECT COUNT(*) FROM Numbers";
$result = mysql_query($sql, $conn) またはtrigger_error("SQL", E_USER_ERROR);
$r = mysql_fetch_row($result);
$numrows = $r[0];

// ページごとに表示する行数
$rowsperpage = 10;
// 総ページ数を調べる
$totalpages = ceil($numrows / $rowsperpage);

// 現在のページを取得するか、デフォルトを設定します
if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {
// var を int としてキャストします
$currentpage = (int) $_GET['currentpage'];
} else {
// デフォルトのページ num
$currentpage = 1;
} // end if

// 現在のページが合計ページより大きい場合.. .
if ($currentpage > $totalpages) {
// 現在のページを最後のページに設定します
$currentpage = $totalpages;
} // 終了 if
// 現在のページが最初のページより小さい場合...
if ($currentpage < 1) {
// 現在のページを最初のページに設定します
$currentpage = 1;
} // end if

// 現在のページに基づくリストのオフセット
$offset = ($currentpage - 1) * $rowsperpage;

// データベースから情報を取得します
$sql = "SELECT id,number FROM数値 LIMIT $offset, $rowsperpage";
$result = mysql_query($sql, $conn) またはtrigger_error ("SQL", E_USER_ERROR);

// フェッチする行がある間...
while ($list = mysql_fetch_assoc($result)) {
// echo data
echo $list['id'] 。 " : " . $list['number'] . "
";
} // 終了 while

/****** ページネーションリンクを構築します ******/
// 表示するリンク数の範囲
$range = 3;

// ページ 1 にない場合は、戻るリンクを表示しない
if ($currentpage > 1) {
// ページ 1 に戻るための << リンクを表示
echo " ";
// 前のページを取得 num
$prevpage = $currentpage - 1;
// show < ; 1 ページに戻るリンク
echo "
< ";
} // end if

// 現在のページの周囲のページ範囲へのリンクを表示するループ
for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {
/ / 有効なページ番号の場合...
if (($x > 0) && ($x // 現在のページにいる場合...
if ($x == $currentpage) {
// 「ハイライト」しますが、リンクは作成しません
echo " [$x] ";
// 現在のページでない場合...
} else {
// リンクにします
echo " $x ";
} // end else
} // end if
} // end for

// 最後のページにない場合、前方リンクと最後のページのリンクを表示
if ($currentpage != $totalpages) {
// 次のページを取得
$nextpage = $currentpage + 1;
// 次のページの転送リンクをエコーし​​ます
echo " > ";
// echo lastpage の転送リンク
echo " >> ";
} // end if
/* ***** ビルドページネーションリンクの終了 ******/
?>

まず一般的に使用される php ページング クラスを見てみましょう

コードは次のとおりです コードをコピーします

/*
ここに DB に接続するコードを配置します
*/
include('config.php'); // DB に接続するためのコードを含めます。

$tbl_name="";  //テーブル名
// 両側に何ページの隣接ページを表示する必要がありますか?
$adjacents = 3;

/*
まず、データテーブルの総行数を取得します。
クエリに WHERE 句がある場合は、必ずここにミラーリングしてください。
*/
$query = "SELECT COUNT(*) as num FROM $tbl_name";
$total_pages = mysql_fetch_array(mysql_query($query)) ;
$total_pages = $total_pages[num];

/* クエリの変数を設定します。 */
$targetpage = "ファイル名.php";  //ファイル名 (このファイルの名前)
$limit = 2;         //ページごとに表示する項目の数
$page = $_GET['page'];
if($page)
$start = ($page - 1) * $limit;    //このページに表示する最初の項目
else
$start = 0;        //ページ変数が指定されていない場合は、start を 0 に設定します

/* データを取得します。 */
$sql = "SELECT column_name FROM $tbl_name LIMIT $start, $limit";
$result = mysql_query($sql);

/* 表示用にページ変数を設定します。 */
if ($page == 0) $page = 1;     // ページ変数が指定されていない場合は、デフォルトで 1 になります。
$prev = $page - 1;       //前のページはページ - 1
$next = $page + 1;       //次のページは page + 1
$lastpage = ceil($total_pages/$limit);  //lastpage は = 総ページ数 / ページごとのアイテム数、切り上げです。
$lpm1 = $lastpage - 1;      //最後のページ マイナス 1

/*
次に、ルールを適用してページネーション オブジェクトを描画します。
複数回描画したい場合に備えて、実際にはコードを変数に保存しています。
*/
$pagination = "";
if($lastpage > 1)
{
$pagination .= "< ;div class="ページネーション">";
//前ボタン
if ($page > 1)
$pagination.= "� 前< /a>";
else
$pagination.= "� 前"; 

//pages
if ($lastpage < 7 + ($adjacents * 2)) //分割するほどページが足りません
{
for ($counter = 1; $counter <= $lastpage; $ counter++)
{
if ($counter == $page)
$pagination.= "$counter";
else
$pagination.= "
$counter";     
}
}
elseif($lastpage > 5 + ($adjacents * 2)) //一部を隠すのに十分なページ数
{
// 先頭に近い;後のページのみを非表示にする
if($page {
for ($counter = 1; $counter {
if ($counter == $page)
$pagination.= "$counter";
else
$pagination.= "$カウンター";     
}
$pagination.= "...";
$pagination.= "$lpm1";
$pagination.= "< ;a href="$targetpage?page=$lastpage">$lastpage";  
}
//中央。前面と背面の一部を非表示にする
elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
{
$pagination.= "1";
    $pagination.= "2";
$pagination.= "...";
for ($counter = $page - $adjacents; $counter <= $page + $counter++)
{
if ($counter == $page)
$pagination.= "$counter";
else
$pagination.= "$counter";     
}
$pagination.= "...";
$pagination.= "$lpm1";
$pagination.= "< ;a href="$targetpage?page=$lastpage">$lastpage";  
}
//終わり間近。初期のページのみを非表示にします
else
{
$pagination.= "1";
$pagination.= "2";
$pagination.= "...";
for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "$counter";
else
$pagination.= " $counter";     
}
}
}

//次へボタン
if ($page < $counter - 1)
$pagination.= "next �< /a>";
else
$pagination.= "next �";
$pagination.= "n";  
}
?>

while($row = mysql_fetch_array($result))
{

// while ループはここにあります

}
?>



コードコードは次のとおりです & & & & & & & & & & & & & & & & & & & & & & {{ public $ページ番号 = 1; /** ページサイズ***** / パブリック $pageSize = 20;
コードをコピー /** ページ番号** /
/**合計何ページ**/

パブリック $pageCount = 0;
/**合計**/
パブリック$totalNum = 0;
/**現在のページのオフセット、開始行**/
public $offSet = 0;
/**ページあたりのデータ**/
public $pageData = array();

/**前のページはありますか**/
public $hasPrePage = true;
/**次のページはありますか**/
public $hasNextPage = true;

public $pageNoList = array();

public $jsFunction ='jsFunction';
/**
*
* @paramknown_type $count 行の合計数
* @paramknown_type $size ページングサイズ
* @paramknown_type $string
* /
public function __construct($count=0, $size=20 ,$pageNo=1,$pageData =array(),$jsFunction='jsFunction'){

$this->totalNum = $count;//レコードの合計数
$this->pageSize = $size;/ /ページごとのサイズ
->pageCount = ($this->pageCountpageCount;
: $ this->pageNo;
$this->pageNo = $this->pageNo > $this->pageCount : $this->pageNo;
Shift $ $ This-& GT; Offset = ($ this-> pageno-1) * $this-& gt;

// 前のページと次のページがあるかどうかを計算します

$ Thisprepage = $ This ->pageNo == 1 ? false:true;

$this->hasNextPage = $this->pageNo >= $this->pageCount ?false:true;

$this->pageData = $pageData;
$this->jsFunction = $jsFunction ;

}
/**
* ページングアルゴリズム
* @return
*/
プライベート関数generatePageList(){
$pageList = array();
if($this->pageCount for($i =0 ;$i<$this->pageCount;$i++){
array_push($pageList,$i+1);
}
}else{
if($this->pageNo <= 4) {
用($i=0;$i<5;$i++){
array_push($pageList,$i+1);
}
array_push($pageList,-1);
array_push($pageList,$this-> pageCount);

}else if($this->pageNo > $this->pageCount - 4){
array_push($pageList,1);


array_push($pageList,-1);
for( $ i = 5; $ i&gt; 0; $ i-){
array_push($ pageList、$ this-&gt; pagecount-$ i+1);
}
} else if($ this-&gt; pageno&gt; 4 && $this->pageNo <= $this->pageCount - 4){
array_push($pageList,1);
array_push($pageList,-1);

array_push($pageList,$this- >pageNo -2);
array_push($pageList,$this->pageNo -1);
array_push($pageList,$this->pageNo);
array_push($pageList,$this-&g t;ページ番号 + 1);
array_push($pageList,$this->pageNo + 2);

array_push($pageList,-1);
array_push($ pageList,$this->pageCount);

}
}
return $pageList;

}🎜

/***
* ページング コントロールを作成します
* @param
* @return String
*/
public function echoPageAsDiv(){
$pageList = $this->generatePageList();

$pageString ="

");
return $pageString;
}
}

?>

css代码

代码如下 复制代码

php页面中的调用方法

代码如下 复制码

$pageNo = $_GET ['pageNo'];
if(empty($pageNo)){
$pageNo = 1;
}
//分页データ
$pageData = News::getNewsPage($pageNo,$pageSize);
// 取得总行数
$count = News::getNewsCount();
//创建分页器
$p = new PageView($count['0']['TOTAL'],$pageSize,$pageNo,$pageData);
/ /生成页码
$pageViewString = $p->echoPageAsDiv();


www.bkjia.com本当http://www.bkjia.com/PHPjc/444637.html技術記事パケットは、大量の結果を表示する場合に現在採用されている最良の方法です。これらのコードの助けを借りて、開発者は大量のデータを相互ネットワーク上で表示できます。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート