ホームページ >バックエンド開発 >PHPチュートリアル >ページングの考え方と ZF_PHP チュートリアルでのその使用法
ページネーションのアイデア:
2 つの変数を取得するだけで、戦いは半分終わります:
1. 各ページに表示するレコード数 $pageSize
2. テーブル $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 ステートメントを実行する単純な関数を使用して取得できます
1
2 /**
3 * $sql ステートメント: ① データを取得する ② 総レコード数を取得する
4*/
5 クラス fenyePage{
6 public $pageSize=5;//各ページに表示される数値 -->プログラマが指定
7 public $rowCount;//これはデータベースから (SELECT COUNT(id) FROM TABLE の形式で) 取得され、レコードの総数を保存するために使用されます
8 public $pageNow;//$_GET['page'] を通じて取得され、現在のページ番号を保存するために使用されます
9 public $pageCount;//合計ページ数を保存するために使用される計算済み
10 Public $res_arr;//ページに表示するデータの保存に使用します(SELECT * FROM TABLE LIMIT 0,10で取得したデータの保存など)
11 Public $nav;//どのページのナビゲーションバーを表示します
12
13 /**
14 * 現在のページのハイパーリンクを取得します
15 *
16 * @著者Xiaofei 2012/5/30
17*/
18 パブリック関数 getLink()
19
20 $this->nav='';
21 $this->pageCount=ceil(($this->rowCount/$this->pageSize));
22 $step= フロア(($this->pageNow-1)/10)*10+1;
23 if ($this->pageNow>10)
24 {
「10ページ進みます
」
26 }
27 if ($this->pageNow!=1)
28 {
29 $this->nav.=" 前のページ ";
30 }
31 if ($this->pageNow!=1)
32 {
33 $this->nav.="ホームページ ";
34 }
35 の場合 ($start=$step;$startpageCount;$start++)
36 {
37 $this->nav.="".$start." ";
38 }
39 if ($this->pageNow!=$this->pageCount)
40 {
41 $this->nav.="末页 ";
42 }
43 if ($this->pageNow!=$this->pageCount)
44 {
45 $this->nav.=" 下一页";
46 }
47 if ($this->pageCount>10 && $this->pageNowpageCount-8){
48 $this->nav.=" >> ";//整体每10页向後翻訳
49 }
50 $this->nav.="/共有".$this->pageCount."页";
51 }
52 }
53 ?>
zf 内のデータベース操作のタスクはモデル層によって実行されるため、$rowCount の値の関数を完了した表モデルに配置しました
比如:私は操作注文表です
那么当我はすべての注文情報を表示するとき、order クラス内の showorder() メソッドを通じて $rowCount の値を取得し、それを添付します
同様に、トップに表示されるデータ情報にも、分別クラス内の $res_arr プロパティが付加されます
このように、私たちは、一分页類(fenyePage)の例を介して非常に簡単に実行でき、その後、それをパラメータ传给showorder()関数、この関数によって次の動作を完了します:
①页面に表示すべき情報
②表中总多少共有条记录
1 /**
2 * 指定されたユーザー ID に基づいて、ユーザーの過去の注文記録をクエリします
3 *
4 * @著者Xiaofei 2012/5/30
5 * @param $id ユーザー ID
6 * @param $fenye ページングを処理するためにインスタンス化されたオブジェクト
7 * @todo $sql1 ステートメント "select * from table where * limit 0,10" この SQL ステートメントは主にデータベース内のデータを取得し、ビュー レイヤーに表示するために使用されます
8 * @todo $sql2 ステートメント "select count(id) from table" この SQL ステートメントはデータの総量を取得するために使用されます
9*/
10 パブリック関数 showorder($id=null,$fenye=null)
11 {
12 $db = $this->getAdapter();
13
14 $select=$db->select();
15 $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'));
16 if ($id!=null){
17 $select->where('o.user_id=?',$id);
18 }
19 $select->join(array('d'=>'Department'),'o.dep_id = d.id','d.dep_name');
20 if($fenye!=null){
21 $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize);
22 }
23 $sql1=$select->__toString();
24 //この SQL ステートメントは主にデータの総量を計算するために使用されます
25 $sql2="「order」から COUNT(id) を選択";
26 $fenye->res_arr=$db->fetchAll($sql1);//呼び出しを容易にするために、表示するデータをページング クラスの $res_arr 属性に格納します
27 $rowCount=$db->fetchAll($sql2);//テーブル内のデータの総量をページング クラスの rowCount 属性に保存します
28 $fenye->rowCount=$rowCount[0]['COUNT(id)'];
29 $fenye->getLink();
30 return $fenye->res_arr;
31 }
この時点でページング機能が実装されました
WEB開発_Xiao Feiより抜粋