ホームページ >バックエンド開発 >PHPチュートリアル >PHP ページングのアイデアを理解するための詳細な説明_PHP チュートリアル

PHP ページングのアイデアを理解するための詳細な説明_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 16:56:15963ブラウズ

PHP でのページングは​​、ページサイズ、カウント、ページ変数、合計ページ数、現在のページはどのページか、ページに表示するレコードの数など、いくつかの点を理解するだけで十分です。必要なのはそれを計算するための式だけです。

変数が 2 つだけあれば、戦いは半分になります:
各ページに表示されるレコードの数 $pageSize
テーブル内のデータの総量 $rowCount
上記 2 つの変数を使用すると、合計ページ数 $pageCount を取得できます
次にforループを通すと、例えば合計13ページある場合、forループを通して簡単にページ数を出力できます

コードは次のとおりです コードをコピー
$nav='';//ページ数を保存するために使用される変数
($i=1;$i {
$nav.="ページ「.$i.」 "; }
上記の for ループは次のような出力を行います

ページ 1、ページ 2、ページ 3、ページ 4、ページ 5、ページ 6、ページ 7、ページ 8、ページ 9、ページ 10、ページ 11、ページ 12、ページ 13 ページ
一度に 10 ページだけを表示したい場合はどうすればよいでしょうか?たとえば、ページ 1 ~ 10、ページ 11 ~ 20
とても簡単で、for ループを少し変更するだけで実現できます

コードは次のとおりですコードをコピー$step= フロア(($pageNow-1)/10)*10+1; ($i=$step;$i {
$nav.="ページ「.$i.」 "; }


たとえば、現在のページ $pageNow が 1 ~ 10 の場合、$step=0 になります
現在のページ $pageNow が 11~20 の場合、$step=10
現在のページ $pageNow が 21~30 の場合、$step=20
特定の実装プロセスのコードを参照すると、毎回 10 だけを表示する状況を実現するには、for ループの 2 番目の条件に 10 を追加するだけでよいことがわかります。このステップを getLink にパッケージ化します。 fenyePage クラス。 では、$pageSize 変数と $rowCount 変数の値を取得するにはどうすればよいでしょうか?
$pageSize はプログラマー自身が指定でき、$rowCount は SQL ステートメントを実行する単純な関数を使用して取得できます

コードは次のとおりですコードをコピー /**
* $sql ステートメント: ① データを取得する ② 総レコード数を取得する
*/
クラス fenyePage{
public $pageSize=5;//各ページに表示される数値 --> プログラマによって指定される
public $rowCount;//これはデータベースから (SELECT COUNT(id) FROM TABLE の形式で) 取得され、レコードの総数を保存するために使用されます
public $pageNow;//$_GET['page'] を通じて取得され、現在のページ番号を保存するために使用されます
public $pageCount;//計算済み、総ページ数を保存するために使用されます
public $res_arr;//ページに表示するデータを保存するために使用されます (SELECT * FROM TABLE LIMIT 0,10 で取得したデータの保存など)
public $nav;//どのページのナビゲーションバーを表示します
/**
* 現在のページのハイパーリンクを取得します
*
* @著者シャオフェイ 2012/5/30
*/
パブリック関数 getLink()
{
$this->nav=''; $this->pageCount=ceil(($this->行数/$this->pageSize)); $step= フロア(($this->pageNow-1)/10)*10+1; if ($this->pageNow>10)
{
$this->nav.=" << ";//全体的に 10 ごとページを進めてください
}
if ($this->pageNow!=1)
{
$this->nav.=" 前のページ "; }
if ($this->pageNow!=1)
{
$this->nav.="ホームページ "; }
for ($start=$step;$start {
$this->nav.="".$start." "; }
if ($this->pageNow!=$this->pageCount)
{
$this->nav.="最後のページ "; }
if ($this->pageNow!=$this->pageCount)
{
$this->nav.=" 次のページ"; }
if ($this->pageCount>10 && $this->pageNowpageCount-8){
$this->nav.=" >> ";//全体的に 10 ごとページを後ろにめくってください
}
$this->nav.="/total".$this->pageCount."ページ"; }
}
?>


ZFでデータベースを操作する作業はモデル層で完結するので、対応するテーブルモデルに$rowCountの値を取得する関数を配置しました
例: 私は注文テーブルを操作します
次に、すべての注文情報を表示したい場合は、注文クラスの showorder() メソッドを通じて $rowCount の値を取得し、それをページング クラスの $rowCount 属性に支払います
同様に、ページに表示するデータ情報もページングクラスの $res_arr 属性に渡されます
このようにして、ページング クラス (fenyePage) を簡単にインスタンス化し、パラメータを通じて showorder() 関数に渡すことができ、関数は次のアクションを完了します。 ①ページに表示する情報
②テーブルにはレコードがいくつありますか?

コードは次のとおりです/** * 指定されたユーザー ID に基づいて、ユーザーの過去の注文記​​録をクエリします
コードをコピー
*
* @著者シャオフェイ 2012/5/30
* @param $id ユーザー ID
* @param $fenye ページングを処理するためにインスタンス化されたオブジェクト
* @todo $sql1 ステートメント "select * from table where * limit 0,10" この SQL ステートメントは主にデータベース内のデータを取得し、ビュー レイヤーに表示するために使用されます
* @todo $sql2 ステートメント "select count(id) from table" この SQL ステートメントはデータの総量を取得するために使用されます
*/
パブリック関数 showorder($id=null,$fenye=null)
{
$db = $this->getAdapter(); $select=$db->select(); $select->from(array('o' => 'order'),array('o.id','o.user_id','o.user_name','o.food_name','o.food_price ','o.order_time','o.order_state')); if ($id!=null){
$select->where('o.user_id=?',$id); }
$select->join(array('d'=>'部門'),'o.dep_id = d.id','d.dep_name'); if($fenye!=null){
$select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize); }
$sql1=$select->__toString(); //この SQL ステートメントは主に総データ量を計算するために使用されます
$sql2="「注文」から COUNT(id) を選択します
$fenye->res_arr=$db->fetchAll($sql1);//簡単に呼び出せるように、表示するデータをページング クラスの $res_arr 属性に保存します
$rowCount=$db->fetchAll($sql2);//テーブル内のデータの総量をページング クラスの rowCount 属性に保存します
$fenye->rowCount=$rowCount[0]['COUNT(id)']
$fenye->getLink(); $fenye->res_arr を返します
}



ページングのコアコードを要約する



コードは次のとおりです

コードをコピー

$this->pageCount=ceil(($this->rowCount/$this->pageSize)); $step= フロア(($this->pageNow-1)/10)*10+1;

次に、sql で select * from table where * limit 0,10 があります。これは、この例では $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye- です。 >ページサイズ); www.bkjia.com

http://www.bkjia.com/PHPjc/631620.html

tru​​e

http://www.bkjia.com/PHPjc/631620.html 技術記事

PHP でのページングは​​、ページサイズ、カウント、ページ変数、合計ページ数、現在のページはどのページか、ページに表示するレコードの数など、いくつかの点を理解するだけで十分です。 ..

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。