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- です。 >ページサイズ); |
|
http://www.bkjia.com/PHPjc/631620.html |
www.bkjia.com
true
http://www.bkjia.com/PHPjc/631620.html
技術記事 PHP でのページングは、ページサイズ、カウント、ページ変数、合計ページ数、現在のページはどのページか、ページに表示するレコードの数など、いくつかの点を理解するだけで十分です。 ..