ホームページ >バックエンド開発 >PHPチュートリアル >PHP ページング コードの例と ZF での使用

PHP ページング コードの例と ZF での使用

WBOY
WBOYオリジナル
2016-07-25 08:52:051231ブラウズ
  1. $nav='';//($i=1;$i<=13;$i++)
  2. {
  3. $nav のページ数
  4. を保存するために使用される変数。 = "ページ ".$i." ";
  5. }
上記のコード

をコピーします。ループは次のようなものを出力します 1ページ、2ページ、3ページ、4ページ、5ページ、6ページ、7ページ、8ページ、9ページ、10ページ、11ページ、12ページ、13ページ 一度に 10 ページだけを表示したい場合はどうすればよいでしょうか?たとえば、1 ~ 10 ページ、11 ~ 20 ページなどです。 for ループを少し変更するだけです。

  1. $step= Floor(($pageNow-1)/10)*10+1;
  2. for ($i=$step;$i<=$step+10;$i++ )
  3. {
  4. $nav.="page ".$i." ";
  5. }
コピーコード

たとえば、現在のページ $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. * $sql ステートメント: ① データを取得する ② 総レコード数を取得する
  3. */
  4. class fenyePage{
  5. public $pageSize=5;//プログラマによって指定されたページごとに表示される数
  6. public $rowCount; //これは、レコードの総数を保存するためにデータベースから (SELECT COUNT(id) FROM TABLE の形式で) 取得されます
  7. public $pageNow;//$_GET['page'] を通じて取得され、現在のレコードの保存に使用されますページ番号
  8. public $pageCount;//計算され、総ページ数を保存するために使用されます
  9. public $res_arr;//ページに表示されるデータを保存するために使用されます (SELECT * FROM TABLE LIMIT 0,10 の保存など)取得したデータ)
  10. public $nav;//どのページのナビゲーションバーを表示する
  11. /**
  12. * 現在のページのハイパーリンクを取得します
  13. *
  14. * @author Xiaofei 2012/5/30
  15. */
  16. public function getLink()
  17. {
  18. $this->nav=''; ;pageCount=ceil(($this->rowCount/$this->pageSize));
  19. $step= フロア(($this->pageNow-1)/10)*10+1; this->pageNow>10)
  20. {
  21. $this->nav.=" << ; < ;/a> ";//全体的に 10 ページごとに進みます
  22. }
  23. if ($this->pageNow!=1)
  24. {
  25. $this->nav.=" 前のページ ";
  26. }
  27. if ($this->pageNow!=1)
  28. {
  29. $this ->nav.="ホームページ ";
  30. }
  31. for ($start=$step;$start<$step +10 && $ start<=$this->pageCount;$start++)
  32. {
  33. $this->nav.=" ".$start ." ";
  34. }
  35. if ($this->pageNow!=$this->pageCount)
  36. {
  37. $this->nav.="最後のページ ";
  38. }
  39. if ($this->pageNow!=$this->pageCount)
  40. {
  41. $this- >nav.=" 次のページ"; ->pageCount>10 && $this->pageNow<$this->pageCount-8){
  42. $this->nav.=" >> ";//全体を 10 ページごとに戻します
  43. }
  44. $this->nav.="/Total ".$this-> ;pageCount."ページ"
  45. }
  46. }
  47. ?>
  48. コードをコピー

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

  1. /**
  2. * 指定されたユーザー ID に従って、ユーザーの履歴注文記録をクエリします
  3. *
  4. * @author Xiaofei 2012/5/30
  5. * @param $id ユーザー ID
  6. * @param $fenye ページング処理用にインスタンス化されたオブジェクト
  7. * @todo $sql1 ステートメント "select * from table where * 制限 0,10" この SQL ステートメントは主に、データベース内のデータを取得してビュー レイヤーに表示するために使用されます
  8. * @todo $sql2 ステートメント "select count( id) from table" この SQL ステートメントは、総データ量を取得するために使用されます
  9. * @link http://bbs.it-home.org
  10. */
  11. public function showorder($id=null,$fenye=null)
  12. {
  13. $db = $this->getAdapter(); $select=$db->select();
  14. $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'));
  15. if ($id!=null){
  16. $select->where('o. user_id=?',$id);
  17. }
  18. $select->join(array('d'=>'部門'),'o.dep_id = d.id','d.dep_name'); if($fenye!=null){
  19. $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize
  20. }
  21. $sql1=$ select->__toString();
  22. //この SQL ステートメントは主にデータの総量を計算するために使用されます
  23. $sql2="SELECT COUNT(id) FROM `order`"; -> ;fetchAll($sql1);//表示するデータをページング クラスの $res_arr 属性に保存します。これは呼び出しに便利です
  24. $rowCount=$db->fetchAll($sql2);//保存テーブル内のデータの総量 ページング クラスの rowCount 属性に移動します
  25. $fenye->rowCount=$rowCount[0]['COUNT(id)'];
  26. $fenye->getLink(); return $fenye->res_arr
  27. }
  28. コードをコピー
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。